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)