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

我正在尝试采取如下所示的string:

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

在括号内有正整数的情况下,我想用整数本身replace它。

我现在使用的代码是:

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

但是我不断收到“分隔符不能是字母数字或反斜杠”错误。

有什么想法吗? 我知道在这里还有其他的问题可以回答这个问题,但是我对正则expression式的了解还不足以把它转换到这个例子。

你几乎在那里。 您正在使用:

 $result = preg_replace("((\d+))", "$0", $string); 
  • 您指定为preg_*函数族的第一个参数的正则expression式应该在一对分隔符中进行分隔。 既然你没有使用任何分隔符,你会得到这个错误。
  • ()是正则expression式中的元字符,意味着它们有特殊的含义。 既然你想匹配字面左括号和右括号,你需要使用\来转义它们。 接下来的任何事情都是字面上的。
  • 您可以使用\d+正确捕获整数。 但是捕获的整数将在$1而不是$0$0将具有整个匹配,即括号内的整数。

如果你做了所有上述改变,你会得到:

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

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

2)你必须逃避'('和')'字符,所以它不认为这是另一个分组。

3)此外,这里的replacevariables从1开始,而不是0(0包含全文匹配,其中将包括括号)。

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

像这样的东西应该工作。 任何进一步的问题,请到PHP的preg_replace()文档 – 这真的很好。

检查文档 – 您需要在模式之前和之后使用分隔符: "/\((\d+)\)/"

您还需要转义上面的外括号,因为它们是文字,而不是嵌套的匹配组。

请参阅: preg_replace手册页

尝试:

 <?php $string = "This (1) is (2) my (3) example (4) text"; $output = preg_replace('/\((\d)\)/i', '$1', $string); echo $output; ?> 

括号字符是正则expression式中的特殊字符。 你需要逃避他们使用它们。