grep 使用哪一種正規表示式標準?

grep 使用哪一種正規表示式標準?

是grep中所使用的正規表示式標準嗎POSIX + ASCII或是混入了其他東西?

答案1

這一切都取決於您傳遞給 grep 的標誌。

正常的無標誌 grep (與傳遞 -G 相同)使用「基本正規表示式」:

-G, --basic-regexp
    Interpret PATTERN as a basic regular expression (BRE, see 
    below).  This is the default.

如果指定 -E 它使用「擴展」正規表示式:

-E, --extended-regexp
    Interpret PATTERN as an extended regular expression (ERE, 
    see below).  (-E is specified by POSIX.)

然後 -P 表示 Perl 正規表示式 (PCRE):

-P, --perl-regexp
    Interpret PATTERN as a Perl regular expression.  This is highly 
    experimental and grep -P may warn  of  unimplemented features.

基本正規表示式與擴展正規表示式

在基本正規表示式中,元字元?+{|()失去其特殊意義;而是使用反斜線版本\?, \+, \{, \|, \(, 和\)

傳統的egrep不支援{元字符,而某些egrep實作\{則支援元字符,因此可移植腳本應避免{使用grep -E模式,而應用於[{]匹配文字{

GNU grep -E 嘗試支援傳統用法,假設{它是無效間隔規範的開始,那麼它並不特別。例如,該命令 grep -E '{1' 搜尋兩個字元的字串{1,而不是報告正規表示式中的語法錯誤。 POSIX.2 允許這種行為作為擴展,但可移植腳本應該避免它。

因此,儘管 grep 努力盡可能接近 POSIX,但它仍然存在一些缺陷。

相關內容