PHP preg_replace 在不同的地方进行多次替换

PHP preg_replace perform multiple replacements at different places

如何让 preg_replace 对同一个字符串在不同位置用不同的值执行多次替换?

我实际上有一个逗号分隔的图像路径字符串,我将其分成多个 <img src=""> 标签,如下所示。

$a = /images/us/US01021422717777-%s.jpg,/images/us/US01021422717780-%s.jpg

然后我做:

preg_replace('~\s?([^\s,]+)\s?(?:,|$)~','<img class="gallery" src="" data-slide=""></div>', $a)

这给了我:

<img src="/images/us/US01021422717777-%s.jpg" data-slide="/images/us/US01021422717777-%s.jpg"> <img src="/images/us/US01021422717780-%s.jpg" data-slide="/images/us/US01021422717780-%s.jpg">

我该怎么做才能将第一个 %s 替换为 m 并将第二个 %s 替换为 %l,使用相同 preg_replace 中的附加代码声明本身。不使用 preg_callback 等

所以我的最终结果如下:

<img src="/images/us/US01021422717777-m.jpg" data-slide="/images/us/US01021422717777-l.jpg"> <img src="/images/us/US01021422717780-m.jpg" data-slide="/images/us/US01021422717780-l.jpg">

我尝试使用 sprintf,但在这种情况下似乎不起作用。

sprintf(preg_replace('~\s?([^\s,]+)\s?(?:,|$)~','<img class="gallery" src="" data-slide=""></div>', $a),'m','l')

我相信您明白我要做什么。有什么帮助吗?

好吧,您可以尝试不捕获 %s 部分。假设它总是在扩展之前,你可以这样做:

preg_replace('~\s?([^\s,]+)-%s(\.[a-z]+)\s?(?:,|$)~i','<img class="gallery" src="-m" data-slide="-l"></div>', $a)