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)
如何让 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)