数据
<li><a href='/html/zjly/'>走进临沂</a></li>
<li><a href='/html/csmp/'>城市名片</a></li>
<li><a href='/html/tzys/'>投资优势</a></li>
<li><a href='/html/zzcy/'>支柱产业</a></li>
<li><a href='/html/xyjj/'>县域经济</a></li>
<li><a href='/html/tzfw/'>投资服务</a></li>
正则1:
(?<=href=(\"|'))([^\"']*)(?=(\1))
匹配结果
正则2:
(?<=href=(\"|'))([^(\1)]*)(?=(\1))
匹配结果
问题
正则1和正则2只有中间的(\1)和\"',按我的理解,此时的分组结果:\1要吗是"或',此时的正则表达式2((?<=href=(\"|'))([^(\1)]*)(?=(\1)))应该能够正常匹配url才对,而结果却不是这样的(如第2图所示)
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
([^(\1)]*)的问题在于方括号里面不能使用编号...------------------
补充:
\1在方括号是没有后向引用的作用的.\1在方括号中代表的意思是ctrl-a,16进制的\x01.就如\11匹配的是tab.参考:Escape sequences
还有,
\1如果有反向引用的作用,就有可能与[]是针对字符集里的单个字符为单位进行匹配这个规则冲突.所以,\1在[]没有反向引用的作用.