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