日期:2014-05-18  浏览次数:20715 次

(\w)\1{4,}和(\w){4,}\1和(\w)\1{4,}\1的困惑
(\w)\1{4,}和(\w){4,}\1和(\w)\1{4,}\1的困惑

" 反向引用 \1, \2...
  表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候,小括号包含的表达式所匹配到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围。比如前面的 "<td>(.*?)</td>"。

  其实,"小括号包含的表达式所匹配到的字符串" 不仅是在匹配结束后才可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 "括号内的子匹配已经匹配到的字符串"。引用方法是 "\" 加上一个数字。"\1" 引用第1对括号内匹配到的字符串,"\2" 引用第2对括号内匹配到的字符串……以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号 "(" 在前,那这一对就先排序号。
"-----------自己这段话理解的不是很好,所以下面的例子就更晕

(\w)\1{4,}和(\w){4,}\1和(\w)\1{4,}\1" 在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 时的困惑
(\w)\1{4,}匹配 ccccc 999999999
(\w){4,}\1匹配 ccccc 111121111 999999999
(\w)\1{4,}\1匹配 999999999
到底\1做了什么呀? 反向引用 \1, \2...那段话真是理解的不是很好。。。
可否说下呢?谢谢了
(\w)\1{4,}匹配 ccccc 999999999
(\w){4,}\1匹配 ccccc 111121111 999999999
(\w)\1{4,}\1匹配 999999999
youngord(621852223) 22:16:20
那\1位置不同,差异那么大呀

------解决方案--------------------
(\w){4,}\1最不好理解,我就记住它吧.
\1 好象是替换成\w,而不是前边匹配的某个具体的字符.
(\w)\1{4,}和(\w)\1{4,}\1 还是一下就看明白了的.就是连续的几个相同的字符.
------解决方案--------------------
你的\w匹配什么,\1就匹配什么,就好比\w\w{4,0},
------解决方案--------------------
楼上说的不对,\w\w{4,0}与(\w)\1{4,0}那是相当的不一样.