2013-01-08 21 views
1

好吧,我有一個RSS源。每篇文章都包含多個HTML鏈接。他們都是同一個主機(例如youtube.com),並且有一個主機不同。 我想過濾這一個鏈接。使用RegEx過濾來自Feed的特定鏈接

因此,在這一刻,有我的最常見的主機規則(imgur,減,tumblr等)的列表,它看起來像這樣:

(?i).*?href="(https?://[^"]*host1[^"]*).* 
(?i).*?href="(https?://[^"]*host2[^"]*).* 
(?i).*?href="(https?://[^"]*host3[^"]*).* 

的問題是:有時總是與未知主機的鏈接。 所以我想要做的是將所有其他鏈接(都是相同的)「列入黑名單」。我讀到(?!regex)但它似乎不工作:

(?i).*?href="(https?://[^"]*(?!youtube)[^"]*).* 

我希望你明白我的問題,我的(可能)的英語不好對不起!

+0

你使用什麼編程語言? –

+0

我在Yahoo Pipes上使用Regex ... –

回答

0

你似乎想要的是相當於「grep -v」,但也許你不能用Yahoo Pipes來做到這一點。如果您打算使用負面預測,您的表情需要準確定義它的位置。

讓我們先從簡單的東西,「YouTube」的視頻在字符串的開頭:

$ echo youtubexyz | perl -lne 'print $1 if /(?!youtube)^(.+)/' 
    $ echo ourtubexyz | perl -lne 'print $1 if /(?!youtube)^(.+)/' 
    ourtubexyz 

現在讓我們做一個正則表達式,針對一些要過濾的網址:

$ echo www.youtube | perl -lne 'print $1 if /(www\.(?!youtube).+)/' 
    $ echo www.ourtube | perl -lne 'print $1 if /(www\.(?!youtube).+)/' 
    www.ourtube 

您可以繼續使您的正則表達式匹配更多的網址,但仍排除「youtube」的網址:

$ echo www.youtube | perl -lne 'print $1 if /((?:www|\/\/)\.(?!youtube).+)/' 

注意:我使用捕獲圓括號和'print $ 1'來說明正在匹配的內容。您可能不需要捕獲您的過濾器。