( )表示子表达式注意:和 [ ] 的区别,[ ]只能匹配单个字符,( )可以匹配多个字符 。\1表示的是第一个子表达式匹配到的结果,而不是第一个子表达式匹配到的结果的第一个字符,这点很重要也很容易搞混了,也就是代表第一个( ),相应的 \2 就代表第二( ),依次类推。表达式后边的部分,可以引用前面 "括号内的子匹配,已经匹配到的字符串"。引用方法是 "\" 加上一个数字。\1\2:"\1" 引用第1对括号内匹配到的字符串,"\2" 引用第2对括号内匹配到的字符串。反向引用和正向引用是一样的,都是引用前面已经匹配了的值。所以\1引用的是第一个括号里的内容,即\w匹配的内容。而由于你没有第二个括号,所以\2什么也不匹配。【lsl -- 正解啊!】当使用小括号指定一个子表达式时,即可得到匹配的文本,即分组的内容。规则从左到右,以分组的左括号为标志,第一个出现的分组组号为1,类类推。\1是 \w 匹配的内容,即整个字符串“aa bbbb abcdefg 111121111”由于没有第二个分组,所以\2匹配为空。其实反向引用在实现上和匿名捕获的实现方式很相似(其名字其实就是\1 \2,我写的正则表达式的引擎里是这么做的,其他大的库我没有做研究,不过从原理上猜测是一样的)。\1\2就是前面出现的()括起来顺序出现的子表达式
联系客服