0

我有一个字符串Action - [N]ew, [U]pdate, or [D]elete : N我需要用“Action - [N]ew, [U]pdate, or [D]elete : U”替换somhow 通过使用 preg_replace 我无法让它工作。它保持不变。

我的代码看起来像这样

$action = Action - '[N]ew, [U]pdate, or [D]elete : U';
$line = preg_replace("/(Action - [N]ew, [U]pdate, or [D]elete : N)/",$action,$line);
4

4 回答 4

3

[]是正则表达式中的特殊字符。如果你想匹配它们,你必须逃避它们:

"/(Action - \[N\]ew, \[U\]pdate, or \[D\]elete : N)/"

在没有被转义的情况下,其中的表达式[]将匹配其中的每个字符之一。所以在你原来的情况下,"[N]ew"是匹配"New"的。如果是"[NP]ew",它会匹配"New"or "Pew"

于 2009-07-31T15:23:46.377 回答
2

你不需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);
于 2009-07-31T15:26:59.757 回答
2

几个问题:

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);
于 2009-07-31T15:30:44.867 回答
0

尝试转义 '[' 和 ']'

于 2009-07-31T15:23:46.487 回答