2012-05-31 84 views
0

我想構建一個正則表達式,以從內容中刪除鏈接,除非它包含2個條件中的1個。正向表達式與負面展望

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

這將匹配link.com的任何鏈接,該鏈接在域部分末尾沒有m /。我想所以簡化版,網址相匹配的是鏈接到PDF文件,無論以m/url中的稍微改變這一點,我想出了:

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

這是戶外等都非常接近,除了現在只有當URL有「。」時纔會匹配。最後 - 我可以看到它爲什麼這樣做。我似乎無法制作「。」可選的,因爲這會導致「。」之前的非貪婪模式。繼續下去,直至碰到[「']

任何幫助將是一件好事,以幫助解決這個問題。

感謝 保羅

回答

1

你可能想使用(?<!\.pdf)["'],而不是\.(?!pdf)["']

但請注意,此表達式有幾個問題,解決它們的最佳方法是使用適當的HTML解析器。

1

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

這就是說,(因爲它可能不會阻止),這裏是一個稍微更好的約束版本的你想要的,但要注意的是這還不夠好! http://rubular.com/r/obkKrKpB8B

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

你可以看到這個正則表達式的運行實例。

你的問題實際上只是你正在尋找一個引號字符後立即點,在這裏:.(?!pdf)["']

+0

謝謝,一個非常全面的表達,是的,它可能不夠好,但我認爲這是野獸的本質。我構建的表達式足以匹配所使用的鏈接,除了pdf鏈接。謝謝你,我會放棄它。 –