2009-07-31 3 views
0

У меня есть строка Действие - [N] ew, [U] pdate или [D] elete: N что мне нужно заменить на «Действие - [N] ew, [U] pdate или [D] elete: U ", то с помощью preg_replace я не могу заставить его работать. Он остается тем же.Замена строки текста другой строкой с использованием 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); 

ответ

3

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

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

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

+0

Thx, это было на самом деле легко, я должен был знать, что слишком много кодирования в течение дня ;-) – Roland

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); 
+0

+ 1 для альтернативного, более простого решения. Я дам свой ответ, если его пример будет просто упрощением. – Welbog

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); 
Смежные вопросы