我不能让这个正则表达式工作:
$string = 'blah blah |one|';
$search = array('/|one|/','/|two|/');
$string = preg_replace($search,"'<img src=\"\"'.str_replace('|','','\\0').'\".png\"/>'",$string);
在这种情况下,我需要它返回blah blah <img src="one.png"/>
,但在替换内部处理函数时遇到问题。
答案 0 :(得分:1)
这个“函数调用”(这只是一个字符串)有什么理由吗? capture groups怎么样?你必须逃避|
,因为它们是特殊字符(alternation):
$string = 'blah blah |one|';
$search = array('/\\|(one)\\|/','/\\|(two)\\|/');
$string = preg_replace($search,'<img src="$1.png"/>',$string);
答案 1 :(得分:1)
您可以捕获名称而不使用|
使用括号:/\|(one)\|/
然后,您可以使用$1
(而不是$0
)来引用捕获的名称。
答案 2 :(得分:1)
如果您想要的内容将文本放在||中,这应该可行作为源,也可能有多个图像转换为相同的字符串:
<?php
$string = 'blah blah |source| more blah blah |another| bye';
$string = preg_replace('/\|([^\|]*)\|/',"<img src='$1.jpg' />",$string);
var_dump($string);
?>
答案 3 :(得分:0)
无需使用数组替换和内联函数使其复杂化。
只需捕获管道之间的值并直接使用它。
preg_replace('/\|(one|two)\|/', '<img src="$1.png" />', $string);