BRE 提供一种叫后向引用的机制, 指的是 "匹配于正则表达式匹配的先前的部分". 使用后向引用的步骤有两个. 第一步是将子表达式包围在 \( 与 \) 里; 单个模式里可包括之多 9 个子表达式, 且可为嵌套结构.
下一步是在同一模式之后使用 \ digit,digit 指的是介于 1 至 9 的数字, 指的是 "匹配于第 n 个先前方括号内子表达式匹配成功的字符"
模式 | 匹配成功 |
\(ab\)\(cd\)[def]*\2\1 | abcdcdab、abcdeeecdab、adcddddeeffcdab、... |
\(why).*\1 | 一行里重现两个 why |
\([[:alpha:]_][[:alnum:]_]*\) = \1 | 简易 C/C++ 赋值语句 |
后向引用在寻找重复字以及匹配引号时特别好用: \(["']\).*\1 匹配以单引号或双引号括起来的字, 例如'foo'或"bar". 在这种方法下, 就无需担心是单引号或是双引号先找到.
来源: http://www.bubuko.com/infodetail-2930826.html