使用preg_replace用另一个字符串替换文本字符串
-
06-07-2019 - |
题
我有一个字符串动作 - [N] ew,[U] pdate或[D] elete:N 我需要替换为“动作 - [N] ew,[U ] pdate,或[D] elete:U“通过使用preg_replace somhow我无法让它工作。它保持不变。
我的代码看起来像这样
$action = Action - '[N]ew, [U]pdate, or [D]elete : U';
$line = preg_replace("/(Action - [N]ew, [U]pdate, or [D]elete : N)/",$action,$line);
解决方案
[
和]
是正则表达式中的特殊字符。如果你想匹配它们,你将不得不逃避它们:
"/(Action - \[N\]ew, \[U\]pdate, or \[D\]elete : N)/"
不进行转义, [
和]
中的表达式将匹配其中的每个字符之一。因此,在您的原始情况下," [N] ew“
匹配" New"
。如果它是" [NP] ew“
,它将匹配" New"
或" Pew"
。
其他提示
你不需要 preg_replace
来做到这一点。一个简单的 str_replace
就足够了:
$action = 'Action - [N]ew, [U]pdate, or [D]elete : U';
$line = str_replace('Action - [N]ew, [U]pdate, or [D]elete : N', $action, $line);
夫妻问题:
1)第一行中出现语法错误。你的报价是错误的。它应该是:
$action = "Action - [N]ew, [U]pdate, or [D]elete : N";
2)您需要在正则表达式中转义方括号( [
和]
)。或者,你可以这样做:
$line = preg_replace("/N$/", "U", $action);
结合它们:
$action = "Action - [N]ew, [U]pdate, or [D]elete : N";
$line = preg_replace("/N$/", "U", $action);
尝试转义'['和']'
不隶属于 StackOverflow