Замена строки текста другой строкой с использованием preg_replace - PullRequest
0 голосов
/ 31 июля 2009

У меня есть строка Действие - [N] ew, [U] pdate или [D] elete: N , которое мне нужно заменить на "Action - [N] ew, [U] pdate или [D] elete: U "с помощью 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 ]

3 голосов
/ 31 июля 2009

[ и ] - специальные символы в регулярных выражениях. Вам нужно будет избежать их, если вы хотите соответствовать им:

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

Без экранирования, а выражения в [ и ] будут соответствовать одному из каждого символа в них. Таким образом, в вашем первоначальном случае "[N]ew" соответствовало "New". Если бы это было "[NP]ew", оно соответствовало бы "New" или "Pew".

2 голосов
/ 31 июля 2009

Пара проблем:

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);
2 голосов
/ 31 июля 2009

Вам не нужно 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);
0 голосов
/ 31 июля 2009

попробуйте экранировать '[' и ']'

...