.NET正则表达式的反向引用
2008-04-12 11:10
267 查看
摘到MSDN
反向引用提供查找重复字符组的方便的方法。它们可被认为是再次匹配同一个字符串的快捷指令。
例如,若要查找重复且相邻的字符(如单词“tall”中的两个 L),可以使用正则表达式
要找到重复的全字,您可以修改该分组子表达式,以搜索前面是空格的任何字符组,而不是只搜索任意单个字符。可以用匹配任何字符组的子表达式
为验证上述第二种匹配是以单词为边界的,可以将元字符
当 ECMAScript 选项标志被启用时,反向引用行为将稍有不同。有关更多信息,请参见 ECMAScript 与规范化匹配行为。
如果一个组尚未捕获任何子字符串,则对该组的反向引用是未定义的并且永远不匹配。例如,表达式
反向引用提供查找重复字符组的方便的方法。它们可被认为是再次匹配同一个字符串的快捷指令。
例如,若要查找重复且相邻的字符(如单词“tall”中的两个 L),可以使用正则表达式
(?<char>/w)/k<char>,该正则表达式使用元字符
/w来查找任何单个单词的字符。分组构造
(?<char> )将元字符括在其中,以强制正则表达式引擎记住子表达式匹配(在此示例中将是任意单个字符),并以名称“char”保存它。反向引用构造
/k<char>使引擎对当前字符和以名称“char”存储的先前匹配字符进行比较。只要单个字符与其前面的字符相同,整个正则表达式就可以找到一个匹配。
要找到重复的全字,您可以修改该分组子表达式,以搜索前面是空格的任何字符组,而不是只搜索任意单个字符。可以用匹配任何字符组的子表达式
/w+替换元字符
/w,并使用元字符
/s匹配字符分组前的空格。这就生成了正则表达式
(?<char>/s/w+)/k<char>,该正则表达式查找任何重复的全字(例如“the the”),但也会匹配指定字符串的其他重复情况,例如词组“the theory”中的重复情况。
为验证上述第二种匹配是以单词为边界的,可以将元字符
/b添加到重复匹配的后面。所生成的正则表达式
(?<char>/s/w+)/k<char>/b只查找重复的、前面有空格的全字。
分析反向引用
表达式/1到
/9总是指反向引用,而不是八进制代码。多位表达式
/11和更高位表达式在具有与该号码对应的反向引用时被视作反向引用;否则,它们会被解释为八进制代码(除非起始位是 8 或 9,在这种情况下它们被视为原义的“8”和“9”)。如果正则表达式包含对未定义的组成员的反向引用,则它被视作分析错误。如果有多义性问题,可以使用
/k<n>表示法,该表示法是明确的,并且不会与八进制符号代码混淆;同样,诸如
/xdd等的十六进制代码也是明确的,并且不会与反向引用混淆。
当 ECMAScript 选项标志被启用时,反向引用行为将稍有不同。有关更多信息,请参见 ECMAScript 与规范化匹配行为。
匹配反向引用
反向引用引用组的最近的定义(当从左到右匹配时,最靠近左侧的定义)。具体地讲,就是当组建立多个捕获时,反向引用引用最近的捕获。例如,(?<1>a)(?<1>/1b)*使用捕获模式
(a)(ab)(abb)来匹配 aababb。循环限定符不清除组定义。
如果一个组尚未捕获任何子字符串,则对该组的反向引用是未定义的并且永远不匹配。例如,表达式
/1()永远不匹配任何字符串,但是表达式
()/1匹配空字符串。
相关文章推荐
- 【转】.NET正则表达式使用高级技巧之反向引用
- .net正则表达式逆序环视中反向引用来看匹配过程。
- .NET正则表达式使用高级技巧之反向引用
- 正则表达式:反向引用
- javascript 正则表达式 反向引用
- 详解JavaScript正则表达式之分组匹配及反向引用
- 正则表达式中的反向引用
- [原]AS3 js正则表达式 反向引用(backreference)
- 正则表达式 --分组 ,反向引用,注释,递归匹配
- Delphi 正则表达式语法(8): 引用子表达式 - 也叫反向引用
- [正则表达式]-基础语法五 反向引用与断言
- Notepad++里面正则表达式反向引用和替换的一个例子
- Delphi 正则表达式语法(8): 引用子表达式 - 也叫反向引用
- 正则表达式:反向引用
- js正则表达式的分组和反向引用
- PHP核心技术与最佳实践之正则表达式反向引用
- [疯狂Java]正则表达式:捕获组、反向引用、捕获组命名
- python 正则表达式反向引用的问题
- javascript 正则表达式 反向引用
- javascript中正则表达式反向引用