【问题标题】:Filter specific link from a feed with RegEx使用 RegEx 过滤提要中的特定链接
【发布时间】:2013-01-08 18:25:09
【问题描述】:

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

所以目前,我有一个最常见主机(imgur、减号、tumblr 等)的规则列表,如下所示:

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

问题是:总是有未知主机的链接。 所以我想要做的是,将主机从所有其他链接(都是相同的)“列入黑名单”。我读到了(?!regex),但它似乎不起作用:

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

我希望你能理解我的问题,并为我(可能)糟糕的英语感到抱歉!

【问题讨论】:

  • 你使用什么编程语言?
  • 我在 Yahoo Pipes 上使用 Regex...

标签: regex yahoo-pipes


【解决方案1】:

您似乎想要的是“grep -v”的等价物,但也许您不能用 Yahoo Pipes 做到这一点。如果您要使用否定前瞻,您的表达式需要准确定义它正在查看的位置。

让我们从一个简单的开始,在字符串的开头使用“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

您可以继续让您的正则表达式匹配更多网址,但仍排除“youtube”网址:

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

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

【讨论】:

    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多