正面表达与负面展望

时间:2012-05-31 17:29:52

标签: regex

我正在尝试构造一个正则表达式来删除内容中的链接,除非它包含2个条件中的一个。

<a.*?href=[""'](http[s]?:\/\/(.*?)\.link\.com)?\/(?!m\/).*?<\/a>

这将匹配link.com的任何链接,该链接在域部分的末尾没有m /。我想略微改变它,所以它不匹配链接到pdf文件的URL,无论网址中有m /,我想出了:

<a.*?href=["'](http[s]?:\/\/(.*?)\.brodies\.com)?\/(?!m\/).*?\.(?!pdf)["'].*?<\/a>

哪个非常接近,除非现在只有URL有“。”才会匹配。最后 - 我明白为什么会这样做。我似乎无法做出“。”因为这会导致非“贪婪”模式在“。”之前。继续前进直到达到[“']

任何帮助都有助于解决这个问题。

由于 保罗

2 个答案:

答案 0 :(得分:1)

您可能希望使用(?<!\.pdf)["']代替\.(?!pdf)["']

但请注意,此表达式有几个问题,解决它们的最佳方法是使用正确的HTML解析器。

答案 1 :(得分:1)

首先,RegEx match open tags except XHTML self-contained tags

那说,(因为它可能不会阻止),这里是你正在尝试的稍微好一点的版本,但需要注意的是这仍然不够好!

<a[^>]+?href\s*=\s*["'](https?:\/\/[^"']*?\.link\.com)?\/(?!m\/)[^"']*?\.(?!pdf)[^"']*?["'][^>]*?>.*?<\/a>

您可以在http://rubular.com/r/obkKrKpB8B找到此正则表达式的运行示例。

你的问题实际上只是你在点后面找到一个引号字符,在这里:.(?!pdf)["']