用于替换HTML中的标签的正则表达式,其中href-attribute以http://开头

时间:2011-10-06 15:18:04

标签: html regex coldfusion replace

我希望匹配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不匹配...

有关此问题的任何提示吗?

2 个答案:

答案 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 的好消息但从未使用过它。