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

问题描述 投票:0回答:5

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

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

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

我现在使用的代码是:

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

但我不断收到

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

警告

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

php regex preg-replace
5个回答
49
投票

你就快到了。您正在使用:

$result = preg_replace("((\d+))", "$0", $string);
  • 您指定为第一个的正则表达式
    preg_*
    函数族的参数 应该以一对分隔 分隔符。由于您没有使用 任何分隔符都会出现该错误。
  • (
    )
    是正则表达式中的元字符, 意味着它们有特殊的意义。 因为你想匹配文字 open 括号和右括号, 你需要使用
    \
    来逃避它们。
    \
    之后的任何内容都会被处理 从字面上看。
  • 您可以捕获整数 正确使用
    \d+
    。但被俘获的 整数将位于
    $1
    而不是
    $0
    $0
    将有整场比赛,即 括号内的整数。

如果您完成上述所有更改,您将得到:

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

11
投票
  1. 您需要有一个分隔符,

    /
    工作正常。

  2. 您必须转义

    (
    )
    字符,这样它就不会认为这是另一个分组。

  3. 此外,这里的替换变量从 1 开始,而不是 0(0 包含完整文本匹配,其中包括括号)。

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

这样的东西应该有效。如有任何其他问题,请访问 PHP 的

preg_replace()
文档 - 它真的很好。


4
投票

检查文档 - 您需要在模式之前和之后使用分隔符:

"/\((\d+)\)/"

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

参见:preg_replace手册页


0
投票

尝试:

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

括号字符是正则表达式中的特殊字符。你需要逃离它们才能使用它们。


0
投票

分隔符不能是字母数字或反斜杠。,

尝试在“/ .... /”中输入参数,如下所示。否则代码将输出 >>> 分隔符不能是字母数字或反斜杠。

$yourString='hi there, good friend';
$dividorString='there';
$someSstring=preg_replace("/$dividorString/",'', $yourString);

echo($someSstring);

// hi, good friend

。 。 为我工作。

© www.soinside.com 2019 - 2024. All rights reserved.