PHP using preg_replace : "Delimiter must not be alphanumeric or backslash" error
Solution 1:
You are almost there. You are using:
$result = preg_replace("((\d+))", "$0", $string);
- The regex you specify as the 1st
argument to
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. - You can capturing the integer
correctly using
\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);
Solution 2:
1) You need to have a delimiter, the /
works fine.
2) You have to escape the (
and )
characters so it doesn't think it's another grouping.
3) 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.
Solution 3:
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.
See: preg_replace manual page