使用PHP RegEx从img标记中查找并替换多个属性

时间:2016-03-09 00:29:39

标签: php regex

//Example of image
$image = '<img src="../img/image.jpeg" title="Title" alt="Alt"/>';

我拥有所有这些$模式,我可以一次获取一个值

// get the src for that image
$pattern_src = '/src="([^"]*)"/';

// get the title for that image
$pattern_title = '/title="([^"]*)"/';

// get the alt for that image
$pattern_alt = '/alt="([^"]*)"/';

我如何使用所有这个$模式与 preg_replace 这样:

preg_replace($pattern_src+$pattern_title+$pattern_alt,$1$2$3,$image);

$1 => src value
$2 => title value
$3 => alt value;

为什么我需要它

<figure>
    <figcaption>
    $2 //Title value
    </figcaption>
    <img src="../web/img/$1"> //New src 
    <figcaption>
    $3 //Alt value
    </figcaption>
</figure>

1 个答案:

答案 0 :(得分:1)

关于不使用正则表达式来解析HTML,以及使用DOMDocument或其他东西的强制性评论,等等等等等等。反正...

这里有两个选择。

首先,如果属性始终采用相同的顺序,您只需将当前规则与.*分开:

'/.*src="([^"]*)".*title="([^"]*)".*alt="([^"]*)"/'

第二个选项,如果它们并非总是以相同的顺序排列,则可以使用正向前瞻:

'/(?=.*src="([^"]*)")(?=.*title="([^"]*)")(?=.*alt="([^"]*)")/'

这将分别srctitlealt返回$1$2$3,无论它们出现在何种顺序图片标签。演示here