正则:分组问题

原创
2016-06-06 20:46:25 639浏览

数据

  • 走进临沂
  • 城市名片
  • 投资优势
  • 支柱产业
  • 县域经济
  • 投资服务
  • 正则1:

    (?<=href=(\"|'))([^\"']*)(?=(\1))
    

    匹配结果


    正则2:

    (?<=href=(\"|'))([^(\1)]*)(?=(\1))
    
    

    匹配结果

    问题
    正则1和正则2只有中间的(\1)\"',按我的理解,此时的分组结果:\1要吗是"或',此时的正则表达式2((?<=href=(\"|'))([^(\1)]*)(?=(\1)))应该能够正常匹配url才对,而结果却不是这样的(如第2图所示)

    回复内容:

    数据

  • 走进临沂
  • 城市名片
  • 投资优势
  • 支柱产业
  • 县域经济
  • 投资服务
  • 正则1:

    (?<=href=(\"|'))([^\"']*)(?=(\1))
    

    匹配结果


    正则2:

    (?<=href=(\"|'))([^(\1)]*)(?=(\1))
    
    

    匹配结果

    问题
    正则1和正则2只有中间的(\1)\"',按我的理解,此时的分组结果:\1要吗是"或',此时的正则表达式2((?<=href=(\"|'))([^(\1)]*)(?=(\1)))应该能够正常匹配url才对,而结果却不是这样的(如第2图所示)

    ([^(\1)]*)的问题在于方括号里面不能使用编号...

    ------------------

    补充: \1在方括号是没有后向引用的作用的. \1在方括号中代表的意思是ctrl-a,16进制的\x01.就如\11匹配的是tab.
    参考:Escape sequences

    还有, \1如果有反向引用的作用,就有可能与 []是针对字符集里的单个字符为单位进行匹配这个规则冲突.所以,\1[]没有反向引用的作用.

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。