Christopher
Christopher

Reputation: 431

PHP using preg_replace : "Delimiter must not be alphanumeric or backslash" error

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

Answers (5)

animuson
animuson

Reputation: 54757

  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.

Upvotes: 11

Darian Harrison
Darian Harrison

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

codaddict
codaddict

Reputation: 455282

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

Upvotes: 50

Atli
Atli

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

pix0r
pix0r

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.

See: preg_replace manual page

Upvotes: 4

Related Questions