PHP正则表达式有助于替换

时间:2011-09-21 19:36:08

标签: php regex preg-replace

我不能让这个正则表达式工作:

$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"/>,但在替换内部处理函数时遇到问题。

4 个答案:

答案 0 :(得分:1)

这个“函数调用”(这只是一个字符串)有什么理由吗? capture groups怎么样?你必须逃避|,因为它们是特殊字符(alternation):

$string = 'blah blah |one|';
$search = array('/\\|(one)\\|/','/\\|(two)\\|/');
$string = preg_replace($search,'<img src="$1.png"/>',$string);

DEMO

答案 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);
相关问题