php - 用于匹配 img 标签的左尖括号和右尖括号内的所有文本的正则表达式

标签 php regex

我想使用 PHP 创建与 html img 标签的开头内的文本及其匹配的结束尖括号相匹配的正则表达式。假设变量 $searchThis 中有 html 文本

$searchThis = "<html><div></div><img src='/relative/path/img1.png'/></div>
<img src='/relative/path/img2.png'/><div></div></div>
<img src='/relative/path/img3.png'/><ul><li></li></ul></html>";

我想匹配省略号所替换的标签中的内容。结果必须是以下匹配:

src='/relative/path/img1.png'
src='/relative/path/img2.png'
src='/relative/path/img3.png'

这就是我想象的模式应该如何,但实际上对我不起作用:

$pattern = "<img([^\/]+)\/>";

最佳答案

切勿尝试使用正则表达式解析 HTML。要解析 HTML,请使用 DOM Parser 。考虑这样的代码:

$html = <<< EOF
<html><div></div><img src='/relative/path/img1.png'/></div>
<img src='/relative/path/img2.png'/><div></div></div>
<img src='/relative/path/img3.png'/><ul><li></li></ul></html>
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query("//img");
for($i=0; $i < $nodelist->length; $i++) {
    $node = $nodelist->item($i);
    $src = $node->attributes->getNamedItem('src')->nodeValue;
    echo "src='$src'\n";
}

输出:

src='/relative/path/img1.png'
src='/relative/path/img2.png'
src='/relative/path/img3.png'

关于php - 用于匹配 img 标签的左尖括号和右尖括号内的所有文本的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16035039/

相关文章:

javascript - 使用 jQuery 中的 $(document).ready 函数从多个动态记录中获取选择选项值?

php - 如何在 codeigniter 中设置私有(private)类以形成验证回调

php - 如何连接两个或多个表,每个表具有相同的列名

java - 正则表达式 : Specific characters in the text

javascript - 在某些文本周围环绕 span 元素时遇到问题。 ( '=' 和 '/')

javascript - Woocommerce 2 可变产品下拉列表,强制第一个始终显示所有选项

C++11 正则表达式抛出 std::regex_error

sql - 从 SQL 中的字符串中提取子字符串

php - 将电影名称和年份与电影文件名分开

php - 在 EasyPost 中定义运输方式或费率