正则表达式在随机位置找到发生

时间:2014-04-25 12:00:00

标签: php regex

我正在使用正则表达式在字符串中查找两个HTML属性(titlestyle)并获取该值。在某些情况下,style属性不存在,因此我只需要title值。

到目前为止,无论title是否已定义,我都可以在style属性位于style属性之前的情况下工作。

出于某种原因,style属性在 title属性之前定义,就会出现问题。

我在Drupal中使用这个正则表达式,所以我不太担心HTML不一致,但属性顺序似乎有问题。

这是我到目前为止的表达


/<img\s{1}.*title=\"(.*)\"\s{1}.*(style=\"(.*)\"\s{1}.*)?>/siU

我搜索了互联网上的文章但找不到合适的解决方案。我希望有人可以帮助我。我对此感到困惑的时间比我已经准备好了。

提前致谢!

1 个答案:

答案 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

Demo