13. 后向引用
\b(\w+)\b\s+\1\b
可以用来匹配重复的单词
,像go go
, 或者kitty kitty
。这个表达式首先是一个单词
,也就是单词开始处和结束处之间的多于一个的字母或数字
(\b(\w+)\b
),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符
(\s+
),最后是分组1中捕获的内容(也就是前面匹配的那个单词)
()。
你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)
(或者把尖括号换成'
也行:(?'Word'\w+)
),这样就把\w+
的组名指定为Word
了。要反向引用这个分组捕获的内容,你可以使用\k<Word>
,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b
。
表4.常用分组语法:
我们已经讨论了前两种语法。第三个(?:exp)
不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像前两种那样被捕获到某个组里面,也不会拥有组号
。“我为什么会想要这样做?”——好问题,你觉得为什么呢?