Php preg替换包含方括号的字符串
我有这样一个字符串:Php preg替换包含方括号的字符串,php,regex,preg-replace,Php,Regex,Preg Replace,我有这样一个字符串:[name-123456] 我试图用一些预定义的字符串替换此字符串的匹配项。以下是我到目前为止的情况: preg_replace('~\['.$string_to_be_replaced.'\]~', $code_to_replace_it_with, $content); 目前这抛出了一个错误,我无法找到如何删除方括号(即使它们是字符串的一部分)。如何确保在正则表达式中删除这些内容,以便将[name-123456]替换为stringofcode 编辑: 这只是返回[nam
[name-123456]
我试图用一些预定义的字符串替换此字符串的匹配项。以下是我到目前为止的情况:
preg_replace('~\['.$string_to_be_replaced.'\]~', $code_to_replace_it_with, $content);
目前这抛出了一个错误,我无法找到如何删除方括号(即使它们是字符串的一部分)。如何确保在正则表达式中删除这些内容,以便将[name-123456]
替换为stringofcode
编辑:
这只是返回[name-123456]:p
vardump生成:
string(16)“\[name \-123456\]”
您的第一个问题可能是您没有将结果分配回:
$content = preg_replace('~...~', $rpl.., $content);
然后,您还应该预先使用将要替换的$string\u转义为。无论如何,搜索字符串中的-
都是必需的
$string_to_be_replaced = preg_quote($string_to_be_replaced, "~");
顺便说一句,还将负责[
方]
方括号
如果您没有进行任何断言或复杂匹配,str_replace()
可能是一种替代方法。这些括号替换可能有多个实例。那么最终的正则表达式会是什么样子呢?这:$string\u to\u be\u replacement=preg\u quote($string\u to\u be\u replacement,“~”)$content=preg_replace(“~[”.$string_to_be_replace.]~”,$str_to_replace_with,$content);?很抱歉,后面的斜线被去掉了。是的,看起来可行。尽管你有一个方括号搜索和相关替换字符串的列表,preg\u replace\u callback
可能是更好的选择。好吧,对我来说很有效,你的问题可能存在于其他地方。嗯,包括方括号两次可能是个问题。我希望在进行preg替换之前,避免使用str replace从[name-123456]中删除方括号。希望能有一个集所有功能于一身的解决方案。
$string_to_be_replaced = preg_quote($string_to_be_replaced, "~");