Html (PCRE Regex)如何匹配字符串(a),除非前面有字符串(b)?

Html (PCRE Regex)如何匹配字符串(a),除非前面有字符串(b)?,html,regex,pcre,Html,Regex,Pcre,使用HTML时,我希望匹配包含字符串的所有标记。例如,我希望匹配所有超链接(单独匹配;每个完整的…标记一个匹配),其中每个超链接中都显示字符串“单击此处” 示例源-我希望将其中每一项作为单独的匹配进行匹配: <a href="/somepage">click here</a> <a href="/somepage">please <b>click here</b> now</a> <a href="/somepage"

使用HTML时,我希望匹配包含字符串的所有标记。例如,我希望匹配所有超链接(单独匹配;每个完整的…标记一个匹配),其中每个超链接中都显示字符串“单击此处”

示例源-我希望将其中每一项作为单独的匹配进行匹配:

<a href="/somepage">click here</a>
<a href="/somepage">please <b>click here</b> now</a>
<a href="/somepage"><img src="/someimage" alt="click here"/></a>

因此,我需要从开始标记开始(例如,
]+>
),然后匹配“单击此处”,但条件是它出现在下一个最近的
结束标记之前。例如,以下情况不适用:

]+>.*单击此处。*?
匹配任何链接(然后是所有HTML),直到第一个“单击此处”。
]+>[^(?:*(?=)
将匹配特定的
标记中的所有内容,但我不知道如何在
(?:)
组中“反向检查”文本。可能吗?

我知道您想匹配包含文本的标记“单击此处”也许里面还有另一个标签。当匹配时,您还需要避免出现这种情况:

<a [^>]*>(?:(?!<\/a>).)*?\bclick here\b(?:(?!<\/a>).)*<\/a>
<a href="#">Hi there</a> <a href="#">Hi, <b>click here</b></a>

而不是只比赛第二名
<a href="#">Hi, <b>click here</b></a>

您需要的是确保标记的开始和“单击此处”文本之间没有结尾。 这应该起作用:

<a\s+[^>]+>((?!</a).)*click here.*</a>

]+>((?!你用哪种语言?PHP?来阻止你的正则表达式使用所有的
使最后一个星号不贪婪
(带转义的正斜杠)。谢谢,这确实奏效了!但是,
(?!我不太确定)之间有什么区别,但如果它有效,你可以用你的“simper”方式来做。