Php 如果HTML源包含给定的URL,如何使用preg_match_all search?
我想在任何html源中查找包含我的URL的所有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
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;-)