yahoo pipes -用RegEx过滤提要中的特定链接



好的,我有一个RSS提要。每篇文章都包含多个html链接。它们都是同一个主机(例如youtube.com),而有一个主机是不同的。我正在尝试过滤这个链接。

所以现在,我有一个最常见的主机(imgur, minus, tumblr等)的规则列表,看起来像这样:

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

问题是:总是存在与未知主机的链接。所以我要做的是,将主机从所有其他链接中"列入黑名单"(这些链接都是一样的)。我读了关于(?!regex),但它似乎不起作用:

(?i).*?href="(https?://[^"]*(?!youtube)[^"]*).*
我希望你能理解我的问题,并为我(可能)糟糕的英语感到抱歉!

您似乎想要的是等效的"grep -v",但也许您无法使用Yahoo Pipes做到这一点。如果你要使用否定的forward,你的表达式需要准确地定义它指向的位置。

让我们从一些简单的开始,"youtube"在字符串的开头:

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

现在让我们创建一个正则表达式,针对一些您想要过滤的url:

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

你可以继续让你的正则表达式匹配更多的url,但仍然排除"youtube"的url:

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

注意:我使用捕获括号和'print $1'来说明匹配的内容。您可能不需要在过滤器中捕获。

相关内容

  • 没有找到相关文章

最新更新