0

我将 Delphi 与 JCLRegEx 一起使用,并希望从谷歌搜索中捕获所有结果 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 获得

我使用的是 Delphi Jedi 版本,因为每次我安装 TPerlRegEx 我都会与两者发生冲突......

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>

FWIW,我想其中一个原因是<Va>这个结果根本没有。我从 Firebug 复制了完整的 html 源代码并尝试将其与您的正则表达式匹配 - 根本没有得到任何匹配。

谷歌可能会不时改变他们显示结果的方式——在给定的时间,它可能会根据你的登录状态、网络历史等因素而有所不同。你想出的特定正则表达式现在可能对你有用,但从长远来看,它会变得难以维护。人们建议使用 html 解析器而不是提供正则表达式,因为他们知道解决方案不稳定。

于 2010-01-25T14:08:02.680 回答
0

如果您需要调试任何语言的正则表达式,您需要查看RegExBuddy,它不是免费的,但它会在一天内收回成本。

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

现在工作。

于 2010-01-24T13:02:58.653 回答