后向引用
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获 的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动 拥有一个 组号 ,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的 组号为1,第二个为2,以此类推。
呃……其实,组号分配还不像我刚 说得那么简单:
• 分组0对应整个正则表达式
• 实际上组号分配过程是要从左向右扫
描两遍的:第一遍只给未命名组分
配,第二遍只给命名组分配--因此
所有命名组的组号都大于未命名的组
号
• 你可以使用 (?:exp) 这样的语法来剥夺 一个分组对组号分配的参与权.
后向引用 用于重复搜索前面某个分组
匹配的文本。例如, \1 代表 分组1匹配的 文本 。难以理解?请看示例:
\b(\w )\b\s \1\b 可以用来匹配 重复的 单词 ,像 go go , 或者 kitty kitty 。这个表达 式首先是 一个单词 ,也就是 单词开始处和 结束处之间的多于一个的字母或数字 ( \b (\w )\b ),这个单词会被捕获到编号为1的 分组中,然后是 1个或几个空白符 ( \s ), 最后是 分组1中捕获的内容(也就是前面匹 配的那个单词) ( \1 )。