2013-01-08 24 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'来说明正在匹配的内容。您可能不需要捕获您的过滤器。