php - 用于查找 HTML 字符串中所有路径的正则表达式

标签 php html regex

我有一个字符串,带有 htmlentities 编码的 HTML 代码。

我想做的是找到文档中的所有路径,介于:

href="XXX", src="XXX".

我确实有一个正则表达式可以找到所有以 http、https、ftp 和文件开头的链接,以免我重复它:

"/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i"

有什么想法吗?

最佳答案

更新:用正则表达式来做是不可靠的。 src=".."或 href=".."语句可以是注释或 javascript 语句的一部分。为了可靠地获取链接,我建议使用 XPath:

<?php

$html = file_get_contents('http://stackoverflow.com/questions/14782334/regex-expression-to-find-all-paths-in-a-html-string/14782594#14782594');
$doc = new DOMDocument();
@$doc->loadHTML($html);
$selector = new DOMXPath($doc);

$result = $selector->query('//a/@href | //@src');
foreach($result as $link) {
    echo $link->value, PHP_EOL;
}

如果使用正则表达式,我会尝试获取 href 或 src 属性的 = " 之间的内容。这里有一个如何从 this 获取链接的示例使用正则表达式的页面:

<?php

$html = file_get_contents('http://stackoverflow.com/questions/14782334/regex-expression-to-find-all-paths-in-a-html-string');

preg_match_all('/href="(?P<href>.*)"|src="(?P<src>.*)"/U', $html, $m);
                                                        <--- note the U to make the 
                                                             pattern ungreedy
var_dump($m['href']);
var_dump($m['src']);

关于php - 用于查找 HTML 字符串中所有路径的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782334/

相关文章:

php - 从本地主机提交表单到(自己的)服务器

php - AWS SQS 使用接收句柄删除消息

php检查方法是否在子类中被覆盖

html - 在具有特定尺寸的 1 个 div 中居中 3 个 div

javascript - 获取特定div中的高亮文本

python - 使用 Python 正则表达式拆分非重叠字符组(ORF 发现)

php - 如何打印打印帖子,评论和回复如何在php中使用循环?

jquery - 如何使 flexbox 布局的一部分变得粘性?

java - 如何在java中使用DOTALL捕获到最后一行末尾的所有内容

regex - RegEx 中的 Javascript 正则表达式