我正在尝试构造一个正则表达式来删除内容中的链接,除非它包含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有“。”才会匹配。最后 - 我明白为什么会这样做。我似乎无法做出“。”因为这会导致非“贪婪”模式在“。”之前。继续前进直到达到[“']
任何帮助都有助于解决这个问题。
由于 保罗
答案 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)["']
。