我正在尝试编写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.aspx
或href
的任何链接的第一部分。替换为\1\2" rel="nofollow"
如果
rel="nofollow"
已经存在,您将得到其中两个。当然,相对链接或其他协议(protocol)(例如ftp://
等)根本不会匹配。说明:
(?!\b(foo|bar)\b)[^"]
与任何非"
字符匹配,除非可以在当前位置匹配foo
或bar
。在那里\b
可以确保我们不会意外触发rebar
或foonly
。重复整个构造(
(?: ... )+
),将匹配的内容保留在后向引用\2
中。由于下一个要匹配的标记是
"
,因此,如果该属性在任何地方包含foo
或bar
,则整个正则表达式将失败。