PCRE和正则表达式的误点(2)

12.强制字面解释:\Q...\E。该序列将其中间的所有字符强制解释为字面符号,强制性极强。
但perl和pcre有所不同。perl中,该序列中间可引用变量进行变量替换,而pcre中变量符号也被当作普通字符。

13.普通分组和捕获

(),$1,$2,$3,$4...有些地方使用\1,\2,\3,\4,sed中使用&表示所有匹配,perl中则使用$&

\g1,\g2,\g3或\g{1},\g{2},\g{3}。

其中$1,$2, ...用于正则外面,而"\g1", "\g2", ... 用于正则内部

14.命名分组和捕获

(?:...):非命名捕获,仅用于分组,不可用于引用,也称为非捕获型括号。例如"(1|one)(?:2|two)(3|three)",$1=(1|one),$2=(3|three)

(?<NAME>...):命名捕获,分组捕获后还命名,就像变量赋值一样。可以使用\k<NAME>或\k'NAME'或\g{NAME}的方法来引用

(?>...):固化分组。一匹配成功就永不交回内容(用回溯的想法理解很容易)。

例如"hello world"可以被"hel.* world"进行匹配,但不能被"hel(?>.*) world"匹配。
因为正常情况下,".*"匹配到所有内容,然后回溯释放一匹配内容直到空格" "字符。而固化分组后,已匹配的内容绝不交回,也就无法回溯。

Linux通配符与正则表达式 

Linux基础之-正则表达式(grep,sed,awk) 

正则表达式语法速查表 

正则表达式总结 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b3f2d95ae5772b035c174e01577cdb41.html