如何让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')
我相信你会明白我想要做的事情。对此有何帮助?
答案 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)