Reputation: 431
I am trying to take a string of text like so:
$string = "This (1) is (2) my (3) example (4) text";
In every instance where there is a positive integer inside of parentheses, I'd like to replace that with simply the integer itself.
The code I'm using now is:
$result = preg_replace("\((\d+)\)", "$0", $string);
But I keep getting a
Delimiter must not be alphanumeric or backslash.
Warning
Any thoughts? I know there are other questions on here that sort of answer the question, but my knowledge of regex is not enough to switch it over to this example.
Upvotes: 43
Views: 63720
Reputation: 54757
You need to have a delimiter, the /
works fine.
You have to escape the (
and )
characters so it doesn't think it's another grouping.
Also, the replace variables here start at 1, not 0 (0 contains the FULL text match, which would include the parentheses).
$result = preg_replace("/\((\d+)\)/", "\\1", $string);
Something like this should work. Any further questions, go to PHP's preg_replace()
documentation - it really is good.
Upvotes: 11
Reputation: 1
Delimiter must not be alphanumeric or backslash.,
try typing your parameters inside "/ .... /" as shown bellow. Else the code will output >>> Delimiter must not be alphanumeric or backslash.
$yourString='hi there, good friend';
$dividorString='there';
$someSstring=preg_replace("/$dividorString/",'', $yourString);
echo($someSstring);
// hi, good friend
. . worked for me.
Upvotes: 0
Reputation: 455282
You are almost there. You are using:
$result = preg_replace("((\d+))", "$0", $string);
preg_*
family of function
should be delimited in pair of
delimiters. Since you are not using
any delimiters you get that error.(
and )
are meta char in a regex,
meaning they have special meaning.
Since you want to match literal open
parenthesis and close parenthesis,
you need to escape them using a \
.
Anything following \
is treated
literally.\d+
. But the captured
integer will be in $1
and not $0
. $0
will have the entire match, that is
integer within parenthesis.If you do all the above changes you'll get:
$result = preg_replace("#\((\d+)\)#", "$1", $string);
Upvotes: 50
Reputation: 7930
Try:
<?php
$string = "This (1) is (2) my (3) example (4) text";
$output = preg_replace('/\((\d)\)/i', '$1', $string);
echo $output;
?>
The parenthesis chars are special chars in a regular expression. You need to escape them to use them.
Upvotes: 0
Reputation: 31290
Check the docs - you need to use a delimiter before and after your pattern: "/\((\d+)\)/"
You'll also want to escape the outer parentheses above as they are literals, not a nested matching group.
Upvotes: 4