PHP 使用preg_replace:“分隔符不得为字母数字或反斜杠”错误

2022-08-30 12:04:37

我正在尝试像这样获取一串文本:

$string = "This (1) is (2) my (3) example (4) text";

在括号内有正整数的每个实例中,我想用整数本身替换它。

我现在使用的代码是:

$result = preg_replace("\((\d+)\)", "$0", $string);

但我不断得到一个

分隔符不得为字母数字或反斜杠。

警告

有什么想法吗?我知道这里还有其他问题可以回答这个问题,但我对正则表达式的了解不足以将其切换到此示例。


答案 1

你快到了。您正在使用:

$result = preg_replace("((\d+))", "$0", $string);
  • 指定为函数系列的第一个参数的正则表达式应以分隔符对进行分隔。由于您没有使用任何分隔符,因此会出现该错误。preg_*
  • (并且是正则表达式中的元字符,这意味着它们具有特殊含义。由于要匹配文字左括号和右括号,因此需要使用 .以下任何内容都按字面意思处理。)\\
  • 您可以使用 正确捕获整数。但是捕获的整数将位于 而不是 。 将具有整个匹配项,即括号内的整数。\d+$1$0$0

如果您执行上述所有更改,您将获得:

$result = preg_replace("#\((\d+)\)#", "$1", $string);

答案 2

1)你需要有一个分隔符,工作正常。/

2)你必须转义和字符,这样它就不会认为这是另一个分组。()

3)此外,此处的替换变量从1开始,而不是0(0包含全文匹配,其中包括括号)。

$result = preg_replace("/\((\d+)\)/", "\\1", $string);

像这样的东西应该有效。任何进一步的问题,请转到PHP的preg_replace()文档 - 它真的很好。


推荐