我正在尝试编写RegEx规则,以在我的网页上找到所有href HTML链接,并向其中添加“rel =“nofollow””。

但是,我有一个必须排除的URL列表(例如,任何ANY(通配符)内部链接(例如pokerdiy.com)-这样,将包含我的域名的任何内部链接都排除在外。也可以在排除列表中指定确切的网址-例如http://www.example.com/link.aspx)

这是我到目前为止无法正常工作的内容:

(] +)(href =“http://.*?(?!(pokerdiy))[^>] +>)

如果您需要更多的背景/信息,可以在此处查看完整的主题和要求(跳过顶部以了解具体内容):
http://www.snapsis.com/Support/tabid/601/aff/9/aft/13117/afv/topic/afpgj/1/Default.aspx#14737

最佳答案

(<a href="https?://)((?:(?!\b(pokerdiy.com|www\.example\.com/link\.aspx)\b)[^"])+)"

会匹配以http://https://开头且在pokerdiy.com属性中的任何地方都不包含www.example.com/link.aspxhref的任何链接的第一部分。替换为
\1\2" rel="nofollow"

如果rel="nofollow"已经存在,您将得到其中两个。当然,相对链接或其他协议(protocol)(例如ftp://等)根本不会匹配。

说明:
(?!\b(foo|bar)\b)[^"]与任何非"字符匹配,除非可以在当前位置匹配foobar。在那里\b可以确保我们不会意外触发rebarfoonly

重复整个构造((?: ... )+),将匹配的内容保留在后向引用\2中。

由于下一个要匹配的标记是",因此,如果该属性在任何地方包含foobar,则整个正则表达式将失败。

10-07 19:42
查看更多