GNU grep 的 basic/extended 和 PCRE (`-P`) 正则表达式有什么区别?
What are the differences between GNU grep's basic/extended and PCRE (`-P`) regular expressions?
GNU grep 的基本 (BRE) 和扩展 (ERE) 语法记录在 https://www.gnu.org/software/grep/manual/html_node/Regular-Expressions.html,PCRE 总结在 man pcresyntax
,但没有明确的比较。 GNU grep 的 basic/extended 和 PCRE (-P
) 正则表达式有什么区别?
我对 http://www.greenend.org.uk/rjk/tech/regexp.html 的主要语法和功能差异的研究:
GNU grep 中的 .
不匹配 null bytes and newlines(但与 --null-data
一起使用时匹配换行符),而 Perl,除了 \n
之外的所有内容都匹配。
GNU grep 中的 [...]
定义了 POSIX 括号表达式,而 Perl 使用“字符”类。我不确定细节。参见 http://www.greenend.org.uk/rjk/tech/regexp.html#bracketexpression
- "在基本正则表达式中,元字符
?
、+
、{
、|
、(
和 )
失去它们的特殊含义;而是使用反斜杠版本 \?
、\+
、\{
、\|
、\(
和 \)
。”来自 https://www.gnu.org/software/grep/manual/html_node/Basic-vs-Extended.html。 ERE 匹配 PCRE 语法。
- GNU grep
\w
和 \W
与 [[:alnum:]]
和 [^[:alnum]]
相同,而 Perl 使用字母数字和下划线。
- GNU grep 有
\<
和 \>
作为单词的开始和结束。
Perl 支持更多的附加功能:
- "nongreedy {}" 语法
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) 语法记录在 https://www.gnu.org/software/grep/manual/html_node/Regular-Expressions.html,PCRE 总结在 man pcresyntax
,但没有明确的比较。 GNU grep 的 basic/extended 和 PCRE (-P
) 正则表达式有什么区别?
我对 http://www.greenend.org.uk/rjk/tech/regexp.html 的主要语法和功能差异的研究:
-
GNU grep 中的
.
不匹配 null bytes and newlines(但与--null-data
一起使用时匹配换行符),而 Perl,除了\n
之外的所有内容都匹配。
GNU grep 中的 [...]
定义了 POSIX 括号表达式,而 Perl 使用“字符”类。我不确定细节。参见 http://www.greenend.org.uk/rjk/tech/regexp.html#bracketexpression- "在基本正则表达式中,元字符
?
、+
、{
、|
、(
和)
失去它们的特殊含义;而是使用反斜杠版本\?
、\+
、\{
、\|
、\(
和\)
。”来自 https://www.gnu.org/software/grep/manual/html_node/Basic-vs-Extended.html。 ERE 匹配 PCRE 语法。 - GNU grep
\w
和\W
与[[:alnum:]]
和[^[:alnum]]
相同,而 Perl 使用字母数字和下划线。 - GNU grep 有
\<
和\>
作为单词的开始和结束。
Perl 支持更多的附加功能:
- "nongreedy {}" 语法
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