preg替换包含方括号的字符串

时间:2013-02-24 16:28:27

标签: php regex preg-replace

我有一个这样的字符串:[name-123456]

我试图用一些预定义的字符串替换此字符串的匹配项。以下是我到目前为止的情况:

preg_replace('~\['.$string_to_be_replaced.'\]~', $code_to_replace_it_with, $content);

目前这会引发错误,我无法找到如何删除方括号(即使它们是字符串的一部分)。如何确保在正则表达式中将其删除,以便[name-123456]替换为stringofcode

编辑:

$string_to_be_replaced = preg_quote($string_to_be_replaced, "~"); 
$content = preg_replace('~\['.$string_to_be_replaced.'\]~', $str_to_replace_with, $content);

这只是返回[name-123456]:p

vardump产生:string(16) "\[name\-123456\]"

1 个答案:

答案 0 :(得分:1)

您的第一个问题可能是您没有分配结果:

$content = preg_replace('~...~', $rpl.., $content);

然后您还应该事先使用preg_quote转义$string_to_be_replaced。无论如何,搜索字符串中的-都是必要的。

$string_to_be_replaced = preg_quote($string_to_be_replaced, "~");

还会处理[]括号,顺便说一句。

如果你没有做任何断言或复杂的匹配,str_replace()可能是另一种选择。