1

さて、私はRSSフィードを持っています。すべての投稿には、複数の HTML リンクが含まれています。それらはすべて同じホスト (例: youtube.com) であり、ホストが異なるものがあります。この1つのリンクをフィルタリングしようとしています。

現時点では、最も一般的なホスト (imgur、minus、tumblr など) のルールのリストを用意しています。これは次のようになります。

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

問題は、不明なホストとのリンクが常に存在することです。だから私がやりたいのは、他のすべてのリンクからホストを「ブラックリストに登録」することです(すべて同じです)。について読みまし(?!regex)たが、うまくいかないようです:

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

あなたが私の問題を理解してくれることを願っています。私の(おそらく)下手な英語で申し訳ありません!

4

1 に答える 1

0

あなたが望んでいるように見えるのは「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

引き続き、正規表現をより多くの URL に一致させ、「youtube」のものを除外することができます。

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

注: 一致するものを説明するために、括弧と 'print $1' を使用しています。フィルターでキャプチャする必要がない場合があります。

于 2013-01-27T20:13:15.660 に答える