我希望匹配HTML-content-variable中href以http://www.example.com开头的所有链接
示例
应匹配:
<a href="http://www.example.com">foo</a>
不应该匹配:
<a href="/bar/">bar</a>
也匹配(在锚点内使用换行符和其他HTML标记):
<a class="bla" id="blubb" href="http://www.example.com/asdf/" title="oops">
<img src="..." alt="" />
</a>
我从这样的事情开始:
<CFSAVECONTENT variable="html">
<a class="bla" id="blubb" href="http://www.example.com/asdf/" title="oops">
<img src="..." alt="" /> some Text
</a>
</CFSAVECONTENT>
<CFSET result = REReplace(html, "<a[^>]*href="http://www\.example\.com[^"]*"[^>]?>([^<]+)</a>", "\1") />
但当然这个与我的最后一个链接示例与a-tag中的img-tag不匹配...
有关此问题的任何提示吗?
答案 0 :(得分:1)
假设:
<CFSAVECONTENT variable="html">
<a class="bla" id="blubb" href="http://www.example.com/asdf/" title="oops">
<img src="..." alt="" /> some Text
</a>
<a href="http://www.example.com/foo">foo</a>
<a href="http://www.yahoo.com">abc</a>
<a href="http://www.example.com/bar">bar</a>
</CFSAVECONTENT>
使用:
<cfset links = ReMatch('<a[^>]*href="http://www\.example\.com[^"]*"[^>]*>(.+?)</a>', html) />
'links'现在是一个匹配的URL数组(锚点1,2和4应该在数组中)。
请记住,我的答案是根据您希望匹配以http://www.example.com
开头的所有主播的假设而构建的,这可能不一定与您在此问题标题中提出的内容相匹配。
答案 1 :(得分:0)
尝试使用正则表达式来对付这样的HTML(特别是如果它不是你的HTML而是#34;狂野的#34;来自互联网的代码)可能既困难又危险,原因有很多
此作业的正确工具是HTML解析器,可以为您提供操作的DOM。
不幸的是,CF没有,所以你需要看看Java。我已经听过关于 Jericho 的好消息但从未使用过它。