正则:分组问题


数据


 <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图所示)

正则表达式 python php

kendnd 11 years, 1 month ago

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

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

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

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

roy0825 answered 11 years, 1 month ago

Your Answer