替代爆炸函数以获取以下代码

时间:2015-09-29 12:20:31

标签: php optimization explode

$full_str = <img class="label" title="input contactusform email" id="label_contactusform_email" alt="this is alt tag">

我有这个字符串表达式,需要获取title和alt标记值

$exploded_part = explode('="', $full_str);
$title_text = $exploded_part[2];

// it also included '" id' so need to explode again

$title_revised = explode('"', $title_text);
$actual_title = $title_revised[0];

$alt_text = $exploded_part[4];

// it also included '">' so need to explode again

$alt_revised = explode('"', $alt_text);

$actual_alt = $alt_revised[0];

我已经阅读过使用explode占用了这么多资源并影响了性能,并且在这段代码中必须多次使用。任何想法建议我可以使这个代码更好,并使用一些其他选项,除了爆炸。

编辑:当我在那时使用下面的表达式时,它实际上不是DOM的一部分,它只是数组值的一部分,我必须将获取的alt和title标签放入元素中成为DOM的一部分。我希望这是有道理的。

2 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式来提取属性及其值:

(\S+)=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?

https://regex101.com/r/rK2bC0/1

答案 1 :(得分:0)

您可以像{/ p>一样使用DOMDocument

$full_str = '<img class="label" title="input contactusform email" id="label_contactusform_email" alt="this is alt tag">';

$dom = new DOMDocument;
$dom->loadHTML($full_str);
$root = $dom->documentElement;
$getDiv = $root->getElementsByTagName('img');
foreach ($getDiv as $val) {
    $title = $val->getAttribute('title');
    $alt = $val->getAttribute('alt');
}

echo $alt;
echo $title;

Demo