PHP preg_replace在不同的地方执行多个替换

时间:2015-02-01 12:04:21

标签: php printf preg-replace str-replace

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

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

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

然后我这样做:

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

我可以使用同一preg_replace语句本身中的其他代码,将第一个%s替换为m,将第二个%s替换为%l。不使用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="$1" data-slide="$1"></div>', $a),'m','l')

我相信你会明白我想要做的事情。对此有何帮助?

1 个答案:

答案 0 :(得分:1)

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

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