Php 正则表达式在随机位置查找事件

Php 正则表达式在随机位置查找事件,php,regex,Php,Regex,我正在使用正则表达式在字符串中查找两个HTML属性(title和style),并获取该值。在某些情况下,style属性不存在,因此我只需要title值 到目前为止,无论是否定义了样式,它都适用于标题属性先于样式属性的情况 由于某种原因,在标题属性之前定义了样式属性时,就会出现问题 我在Drupal中使用这个正则表达式,所以我不太担心不一致的HTML,但是属性顺序似乎有问题 这是我到目前为止的表达方式 /<img\s{1}.*title=\"(.*)\"\s{1}.*(style=\"(.

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

到目前为止,无论是否定义了
样式
,它都适用于
标题
属性先于
样式
属性的情况

由于某种原因,在
标题
属性之前定义了
样式
属性时,就会出现问题

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

这是我到目前为止的表达方式


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

//萧
我在互联网上搜索过文章,但找不到有效的解决方案。我希望有人能帮助我。我对这件事困惑了很长时间,然后我应该准备好了


提前谢谢

正则表达式不是执行此任务的最佳工具。改用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";
    }
}

您希望获得哪些值<代码>标题,
风格
或两者都有?我总是建议人们将任务拆分为多个正则表达式。因此,最简单的解决方案是使用第一个正则表达式获取完整的IMG标记,并将该标记传递给2个新的正则表达式作为输入。一个用于查找title属性,另一个用于查找style属性。我需要有title属性以及样式(如果可用)。也许创建两个正则表达式可以工作。我会试试的是的,@Scordo把它一分为二成功了!谢谢什么?对于如何使用reg ex解析(X)HTML没有尖刻的评论+我知道,即使你是对的,但我需要把它放在一个只允许我使用正则表达式的模块中。不幸的是,我不适合(也没有能力)编写自定义module@Maurice:我不知道您所说的“模块”是什么意思,但如果您使用的是PHP,那么您将能够使用DOMDocument类。它附带PHP5+。为什么你不能用它?如果必须绝对使用正则表达式,则将其拆分为两个表达式。那样的话,就容易多了。