(?<=<span ch="w.tag.yjj"><a target="_blank" href=".*?">).*?(?=</a>.*?</span>)匹配<div class="tag" id="questionTag">
[ 标签:<span ch="w.tag.yjj"><a target="_blank" href="/z/Search.e?sp=S%E6%9F%94%E8%82%A4%E6%B0%B4">柔肤水</a><span>,</span></span><span ch="w.tag.yjj"><a target="_blank" href="/z/Search.e?sp=S%E7%94%A8%E5%A4%84">用处</a></span> ]
</div>
的时候结果是
柔肤水
<a target="_blank" href="/z/Search.e?sp=S%E7%94%A8%E5%A4%84">用处
而不是柔肤水和用处,如果不用断言,结果正常,用了断言结果就不对了。我换成|写了两个正则表达式分别匹配两个标签,最终结果是><span ch="w.tag.yjj"><a target="_blank" href="/z/Search.e?sp=S%E7%94%A8%E5%A4%84">用处</a></span> ]
后面这里只要正则表达式最前边不带>还是和开始的正则表达式结果一样。
谁知道是怎么回事?是不是个BUG?
[ 标签:<span ch="w.tag.yjj"><a target="_blank" href="/z/Search.e?sp=S%E6%9F%94%E8%82%A4%E6%B0%B4">柔肤水</a><span>,</span></span><span ch="w.tag.yjj"><a target="_blank" href="/z/Search.e?sp=S%E7%94%A8%E5%A4%84">用处</a></span> ]
</div>
的时候结果是
柔肤水
<a target="_blank" href="/z/Search.e?sp=S%E7%94%A8%E5%A4%84">用处
而不是柔肤水和用处,如果不用断言,结果正常,用了断言结果就不对了。我换成|写了两个正则表达式分别匹配两个标签,最终结果是><span ch="w.tag.yjj"><a target="_blank" href="/z/Search.e?sp=S%E7%94%A8%E5%A4%84">用处</a></span> ]
后面这里只要正则表达式最前边不带>还是和开始的正则表达式结果一样。
谁知道是怎么回事?是不是个BUG?
修改成这样就可以了,在你的基本上修改的:(?is)(?<=<span ch="w\.tag\.yjj"><a target="_blank" href=".*?">)[^<>]+(?=</a>.*?</span>)
然后再匹配后面的可以匹配到这两个选项。可是加了断言后,从我的结果来看,只有一种可能开始匹配到了“柔肤水”,然后再次匹配的时候是匹配到的<span ch="w.tag.yjj"><a target="_blank" href="/z/Search.e?sp=S%E6%9F%94%E8%82%A4%E6%B0%B4">柔肤水</a><span>,</span></span><span ch="w.tag.yjj"><a target="_blank" href="/z/Search.e?sp=S%E7%94%A8%E5%A4%84">用处</a></span>&这个这一大块,然后去除断言的部分,就是看到的这种结果。
我以前理解的正则表达式匹配的时候是从前往后,匹配到一个结果后接着用剩下的文本匹配出其余的结果。现在这种结果看是匹配到一个结果之后,去除匹配的结果,而且不包括断言,然后递归一直到匹配不到结果的时候。是这样的吗?