使用 PHP 正则表达式从 img 标签中查找并替换多个属性


Find and replace multiple attributes from img tag using PHP RegEx

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

我有所有这些$patterns,我可以一次获取一个值

// 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="([^"]*)"/';

我如何将所有这些$patterns与这样的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>
关于

不使用正则表达式来解析 HTML 并使用 DOMDocument 或其他东西的强制性评论,等等等等。无论如何。。。

这里有两个选项。

首先,如果属性始终按相同的顺序排列,则可以简单地使用.*分隔当前规则:

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

第二种选择,如果它们并不总是以相同的顺序,您可以使用积极的前瞻:

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

这将分别返回srctitlealt作为$1$2$3,无论它们在图像标签中出现的顺序如何。在这里演示