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"。在这种方法下,就无需担心是单引号或是双引号先找到。