3

免責事項: html と regex を併用してはならないことはわかっていますが、これは例外的なケースです。

Google 検索結果を解析し、キャッシュ URL を抽出する必要があります。私はこれをページに持っています:

<a href="/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:
gsNKb7ku3ewJ:somedata&ei=MyIIUtrZAcPX7AaVzIHwDg&amp;ved=0CB8QIDAC&amp;usg
=AFQjCNGcnWfdzQiTKwyAMmI-M-xzxII5Ag">Cached</a>

私は次のような簡単なことを試しました:href=[\'"]?([^\'" >]+)しかし、それは私が必要とするものではありません。hrefから単一のパラメーター ( q )を抽出したい。私は取得する必要があります:

http://webcache.googleusercontent.com/search%3Fq%3Dcache:gsNKb7ku3ewJ:somedata

したがって、コンテンツに「webcache」という単語が含まれている場合、「url?q=」と最初の「&」の間のすべて。

4

2 に答える 2

1

前に後読みを使用し、最後に先読みを使用して周囲のテキストをアサートし、正規表現にキーワードを含めます。

(?<=url\?q=)[^&]*webcache[^&]*(?=&)

を使用[^&]*すると、キーワードがターゲット文字列内の & - の前にあることが保証されます。

于 2013-08-12T00:21:23.950 に答える
1

お使いの言語が肯定的な後読みをサポートしている場合:

(?<=q=).*?(?=[&"])

それ以外の場合は、次の式でグループに一致\1します:

(?:q=)(.*?)(?=[&"])

説明:

  • .*?私たちの表現の本体です。すべてを一致させるだけですが、貪欲になる必要はありません。
  • (?<=q=)は肯定的な後読みで、「q= は試合の前に来るべきだ」と言っています
  • (?=[&"])は前向きな見方で、「試合後に & または引用符を付ける必要があります」という意味です。

で貪欲にならないようにしているため?、最初の引用符またはアンパサンドで停止します。それ以外の場合は、最後の引用符までずっと一致します。

于 2013-08-12T00:22:38.470 に答える