开发者

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

开发者 https://www.devze.com 2022-12-24 15:42 出处:网络
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 replacet

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:

$resul开发者_StackOverflowt = 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.


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


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.


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


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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消