我已经有了这个正则表达式模式,可以检查我的文档中的每个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>
先谢谢,我还没能解决这个问题。
答案 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>