正则表达式匹配任何与href =""但在另外两个标签之间

时间:2016-10-02 15:18:58

标签: php html regex

我已经有了这个正则表达式模式,可以检查我的文档中的每个href=""

\(href\s*=\s*(?:"|')(.*?)(?:"|'))

现在我希望它仅在href<a标记之间匹配所有</a>,其他参数仍然允许。

不匹配:

<base href="http://www.w3schools.com/images/" target="_blank">

<link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">

匹配

<a href="http://www.w3schools.com/"></a>

<a class="re" href="http://www.w3schools.com/"></a>

<a href="http://www.w3schools.com/" class="re">This is a link</a>

先谢谢,我还没能解决这个问题。

1 个答案:

答案 0 :(得分:0)

注意:由于语言类(常规,堆栈)的限制,这不能100%完成。但近似的是:

<a\b[^>]*\shref="([^"]*)"

或者,如果您使用命名子表达式:

<a\b[^>]*\shref=(?P<QUOTE>["'])(?P<URL>.*?)(?P=QUOTE)

这也将处理撇号分隔的属性。

最后一个例子也可以改写为:

<a\b[^>]*\shref=(["'])(.*?)(\1)

但请记住使用第二个子表达式,而不是第一个。

目前尚不清楚您是否想要获取链接的名称,但如果您这样做,无论您选择哪种正则表达式,都可以添加一个简单的附录来获取名称。例如,对于命名的子表达式:

<a\b[^>]*\shref=(?P<QUOTE>["'])(?P<URL>.*?)(?P=QUOTE)[^>]*>(?P<NAME>.*?)</a>