GNU grep 的基本/扩展和 PCRE (`-P`) 正则表达式有什么区别?

qwr*_*qwr 5 regex grep pcre gnu

GNU grep 的基本 (BRE) 和扩展 (ERE) 语法记录在https://www.gnu.org/software/grep/manual/html_node/Regular-Expressions.html,PCRE 总结在man pcresyntax,但没有明确的比较。GNU grep 的基本/扩展正则表达式和 PCRE ( ) 正则表达式有什么区别-P

qwr*_*qwr 6

我对主要语法和功能差异的研究来自http://www.greenend.org.uk/rjk/tech/regexp.html

Perl 支持更多附加功能:

  • “非贪婪 {}” 语法re{...}?
  • 其他锚点和字符类型\A, \C, \d, \D, \G, \p, \P, \s, \S, \X\Z, \z.
  • (?#comment)
  • 害羞分组(?:re)、害羞分组+修饰符(?modifiers:re)
  • 前瞻和负前瞻(?=re)(?!re)、后瞻和负后瞻(?<=p)(?<!p)
  • 原子团(?>re)
  • 条件表达式(?(cond)re)
  • ...以及更多,请参阅man pcresyntax

  • 当我意识到这一点时,我发现这一点非常有帮助:在 GNU grep 中,BRE 和 ERE 在功能上“相同”——它们仅在需要转义的内容上有所不同。一般来说,BRE 和 ERE 并非如此。例如,POSIX BRE 不支持通过 `\+` 的“一个或多个”,仅通过 `\{1,\}` 支持。 (4认同)