0

JCLRegEx で Delphi を使用しており、Google 検索からすべての結果 URL を取得したいと考えています。HackingSearch.com を見たところ、正しく見える RegEx の例がありますが、試してみると結果が得られません。

私はそれを次のように使用しています:

Var re:JVCLRegEx;
    I:Integer; 
Begin
  re := TJclRegEx.Create;

  With re do try
    Compile('class="?r"?>.+?href="(.+?)".*?>(.+?)<\/a>.+?class="?s"?>(.+?)<cite>.+?class="?gl"?><a href="(.+?)"><\/div><[li|\/ol]',false,false);  
    If match(memo1.lines.text) then begin
      For I := 0 to captureCount -1 do
        memo2.lines.add(captures[1]);
    end;
  finally free;
  end;
  freeandnil(re);
end;

正規表現はhackingsearch.comで入手できます。

TPerlRegEx をインストールするたびに 2 つの競合が発生するため、Delphi Jedi バージョンを使用しています...

4

4 に答える 4

1

オフトピック: Google AJAX 検索 API を試すことができます: http://code.google.com/apis/ajaxsearch/documentation/

于 2010-01-23T11:39:01.020 に答える
1

以下は、用語 の Google 検索結果からの関連セクションpython tupleです。(あちこちに新しい行を追加して画面に合うように変更しましたが、Firebug によって明らかにされたように、Google のソースから取得した生の文字列で正規表現をテストしました)。あなたの正規表現は、この文字列に一致しませんでした。

<li class="g w0">
  <h3 class="r">
    <a onmousedown="return rwt(this,'','','res','2','AFQjCNG5WXSP8xy6BkJFyA2Emg8JrFW2_g','&amp;sig2=4MpG_Ib3MrwYmIG6DbZjSg','0CBUQFjAB')" 
      class="l" href="http://www.korokithakis.net/tutorials/python">Learn <em>Python</em> in 10 minutes | Stavros's Stuff</a>
  </h3>
  <span style="display: inline-block;">
    <button class="w10">
    </button>
    <button class="w20">
    </button>
  </span>
  <span class="m">&nbsp;<span dir="ltr">- 2 visits</span>&nbsp;<span dir="ltr">- Jan 21</span></span>
  <div class="s">
  The data structures available in <em>python</em> are lists, <em>tuples</em>
   and dictionaries. Sets are available in the sets library (but are built-in in <em>
  Python</em> 2.5 and <b>...</b><br>
  <cite>
    www.korokithakis.net/tutorials/<b>
    python</b>
     - 
  </cite>
  <span class="gl">
    <a onmousedown="return rwt(this,'','','clnk','2','AFQjCNFVaSJCprC5enuMZ9Nt7OZ8VzDkMg','&amp;sig2=4qxw5AldSTW70S01iulYeA')" 
      href="http://74.125.153.132/search?q=cache:oeYpHokMeBAJ:www.korokithakis.net/tutorials/python+python+tuple&amp;cd=2&amp;hl=en&amp;ct=clnk&amp;client=firefox-a">
      Cached
    </a>
     - <button title="Comment" class="wci">
    </button>
    <button class="w4" title="Promote">
    </button>
    <button class="w5" title="Remove">
    </button>
  </span>
  </div>
  <div class="wce">
  </div>
  <!--n-->
  <!--m-->
</li>

<Va>FWIW、多くの理由の1つは、この結果にまったくないということだと思います. Firebug から完全な html ソースをコピーし、正規表現と一致させようとしましたが、まったく一致しませんでした。

Google は、結果の表示方法を随時変更する可能性があります。特定の時点で、ログイン ステータス、ウェブ履歴などの要因によって異なる場合があります。思いついた特定の正規表現が今のところ機能している可能性があります。しかし、長期的には維持が難しくなります。解決策が安定しないことを知っているため、正規表現を使用する代わりに html パーサーを使用することをお勧めします。

于 2010-01-25T14:08:02.680 に答える
0

任意の言語で正規表現をデバッグする必要がある場合は、RegExBuddyを確認する必要があります。これは無料ではありませんが、1 日で元が取れます。

于 2010-01-23T10:47:17.653 に答える
0
class=r?>.+?href="(.+?)".*?>(.+?)<\/a>.+?class="?s"?>(.+?)<cite> .+?class="?gl"?>

今のところ動作します。

于 2010-01-24T13:02:58.653 に答える