0

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

4 Answers 4

3

[ 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".

Sign up to request clarification or add additional context in comments.

1 Comment

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

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

1 Comment

+1 for an alternate, simpler solution. I'll let my answer stand in case his example is just a simplification.
2

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

Comments

0

try escaping the '[' and ']'

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.