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式中的特殊字符。 你需要逃避他们使用它们。