【问题标题】:Regex link from google results来自谷歌结果的正则表达式链接
【发布时间】:2013-04-28 19:31:04
【问题描述】:

我试图从 Google 结果中获取 URLs,但 Google api 不允许获得超过前 100 个结果,所以我想复制 Google 内容,将其粘贴到文件中并使用 preg_match_all 来获得结果。不幸的是,我不擅长正则表达式。

有人可以帮我解决这个问题吗?主要问题是链接没有“http://”。

$body="PHP – Wikipedia, wolna encyklopedia
        pl.wikipedia.org/wiki/PHP‎
        PHP jest najczęściej stosowany do tworzenia skryptów po stronie serwera WWW, ale może być on również używany do przetwarzania danych z poziomu ...
        Możliwości - Historia - Moduły - Składnia
        PHP: Hypertext Preprocessor
        php.net/‎Tłumaczenie strony
        Server-side HTML embedded scripting language. It provides web developers with a full suite of tools for building dynamic websites: native APIs to Apache and ...
        Downloads - Documentation - A simple tutorial - News Archive - 2012
        PHP: Downloads
        php.net/downloads.php‎Tłumaczenie strony
        Binaries for other systems. We do not distribute UNIX/Linux binaries. Most Linux distributions come with PHP these days, so if you do not want to compile your ...
        PHP Tutorial - W3Schools
        www.w3schools.com/php/‎Tłumaczenie strony
        Provides basic to advanced PHP functions. Users can also learn how to integrate PHP with other languages such as MYSQL, AJAX, and XML.
        Kurs PHP
        phpkurs.pl/‎
        Kurs programowania w języku PHP. Kurs ten ma za zadanie zaznajomić osobę kompletnie nieobeznaną z tym językiem na tyle, aby sama była w stanie napisać ...
        Podstawy - Operacje na plikach - Ciągi znakowe (stringi) - Tablice";
    preg_match_all('/^(www\.)?[a-z0-9_\-]+.[a-z]+$/', $body, $match);

print_r($match);

结果:

 Array ( [0] => Array ( ) [1] => Array ( ) )

你能帮我解决一下吗?

【问题讨论】:

  • 你知道^$是什么意思吗?它们不仅仅是用于每个正则表达式的装饰器。
  • 我认为这是行的开始和结束。我也试过这个 '/^(www\.)?[a-z0-9_\-]+.[a-z]+[^
  • 在您的摘录中,链接不是从行首开始的。前面有空格。如果使用/m 标志,$ 仅在行尾有效。否则 ^$ 涉及主题开始/结束,而不是行。
  • 好吧,所以在添加 /m 标志后什么也没发生。我尝试过这样的事情:'/^[^<]*(www\.)?[a-z0-9_\-]+.[a-z]+[^<]*$/m'
  • 正则表达式不是从 HTML 中提取数据的最佳方法,但您发布的内容没有任何 HTML 标记。 HTML 发生了什么?如果您提供 HTML,我可以提供更好的解决方案。

标签: php regex preg-match-all


【解决方案1】:

这将匹配大多数基本的 url 模式,并接受 url 的任何结尾。我在您的示例输入上对其进行了测试,它似乎可以按您的意愿工作。

preg_match_all('/((?:(?!-)[a-z\d-]+[^-]\.)+[a-z]{2,6}.*)/', $body, $match)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2022-11-21
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多