views:

154

answers:

4

I have a string Action - [N]ew, [U]pdate, or [D]elete : N that I need to replace with "Action - [N]ew, [U]pdate, or [D]elete : U" somhow by using preg_replace I can't get it working. It remains the same.

My code looks like this

$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  A: 

[ and ] are special characters in regular expressions. You'll have to escape them if you want to match them:

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

Without being escaped, and expression within [ and ] will match one of every character within them. So in your original case, "[N]ew" was matching "New". If it had been "[NP]ew", it would have matched "New" or "Pew".

Welbog
Thx, this was actually easy, I had to know that, too much coding for a day ;-)
Roland
A: 

try escaping the '[' and ']'

cube
+2  A: 

You don’t need preg_replace to do that. A simple str_replace will suffice:

$action = 'Action - [N]ew, [U]pdate, or [D]elete : U';
$line = str_replace('Action - [N]ew, [U]pdate, or [D]elete : N', $action, $line);
Gumbo
+1 for an alternate, simpler solution. I'll let my answer stand in case his example is just a simplification.
Welbog
+2  A: 

Couple problems:

1) Syntax error in your first line. Your quotes are misplaced. It should be:

 $action = "Action - [N]ew, [U]pdate, or [D]elete : N";

2) You need to escape the square brackets ([ and ]) in regular expressions. Alternatively, you can do:

 $line = preg_replace("/N$/", "U", $action);

So combining them:

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