Php 如果HTML源包含给定的URL,如何使用preg_match_all search?

Php 如果HTML源包含给定的URL,如何使用preg_match_all search?,php,regex,preg-match-all,Php,Regex,Preg Match All,我想在任何html源中查找包含我的URL的所有href标记 我使用了以下代码: preg_match_all("'<a.*?href=\"(http[s]*://[^>\"]*?)\"[^>]*?>(.*?)</a>'si", $target_source, $matches); preg\u match\u all(“'si',$target\u source,$matches”); 例如,我尝试查找包含http://www.emrekadan.com

我想在任何html源中查找包含我的URL的所有
href
标记

我使用了以下代码:

preg_match_all("'<a.*?href=\"(http[s]*://[^>\"]*?)\"[^>]*?>(.*?)</a>'si", $target_source, $matches);
preg\u match\u all(“'si',$target\u source,$matches”);
例如,我尝试查找包含
http://www.emrekadan.com

我怎么做

为此,我只需使用PHP的解析器即可。这似乎比正则表达式更难,但实际上要简单得多,而且是解析HTML的正确方法

$url = 'WEBSITE_TO_SEARCH_FOR';
$searchstring = 'YOUR_SEARCH_STRING';
$dom = new DOMDocument();
@$dom->loadHTMLFile($url);
$result = array();

foreach($dom->getElementsByTagName('a') as $link) {
    $href = $link->getAttribute('href');
    if(stripos($href, $searchstring) !== FALSE) {
        $result[] = $href;
    }
}

if(!empty($result)) print_r($result);
说明:

  • 使用方法加载给定的URL
  • 查找所有
    以不区分大小写的方式检查href是否包含给定的搜索词
  • 如果是,它将被推入
    $result
    数组中

注意:如果将空字符串作为文件名传递或命名为空文件,将生成警告。我用
@
来隐藏这条信息,但这通常被认为是一种不好的做法。在尝试加载URL之前,您可以添加额外的检查以确保URL存在。

您只是在查找字符串“”?@AmalMurali正如OP所述,它更快更简单<代码>+1
;-)