我正在使用正则表达式在字符串中查找两个HTML属性(title
和style
)并获取该值。在某些情况下,style
属性不存在,因此我只需要title
值。
到目前为止,无论title
是否已定义,我都可以在style
属性位于style
属性之前的情况下工作。
出于某种原因,style
属性在 title
属性之前定义,就会出现问题。
我在Drupal中使用这个正则表达式,所以我不太担心HTML不一致,但属性顺序似乎有问题。
这是我到目前为止的表达
/<img\s{1}.*title=\"(.*)\"\s{1}.*(style=\"(.*)\"\s{1}.*)?>/siU
我搜索了互联网上的文章但找不到合适的解决方案。我希望有人可以帮助我。我对此感到困惑的时间比我已经准备好了。
提前致谢!
答案 0 :(得分:2)
正则表达式不是执行此任务的最佳工具。请改用DOM解析器。这是使用PHP的内置DOMDocument类的一个解决方案:
$html = <<<HTML
<img style="width:20px" title="Some Title" src="foobar.jpg" />
<img title="Some Title" src="foobar.jpg" />
HTML;
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('img') as $img)
{
if (!$img->hasAttribute('style') && $img->hasAttribute('title'))
{
echo $img->getAttribute('title') . "\n";
}
elseif ($img->hasAttribute('style') && $img->hasAttribute('title'))
{
echo $img->getAttribute('style') . "\n";
echo $img->getAttribute('title') . "\n\n";
}
}
输出:
width:20px
Some Title
Some Title