【问题标题】:PHP using preg_replace : "Delimiter must not be alphanumeric or backslash" errorPHP 使用 preg_replace :“分隔符不能是字母数字或反斜杠”错误
【发布时间】:2011-02-01 10:17:39
【问题描述】:

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

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

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

我现在使用的代码是:

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

但我一直得到一个

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

警告

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

【问题讨论】:

  • 如果有人想知道为什么所有答案都说在它们已经存在时添加反斜杠,那是因为它们最初没有显示。 @Christopher,您应该始终通过缩进四个空格或将其括在反引号中来格​​式化代码示例(尤其是正则表达式!)。
  • 由于您是 stackoverflow 的新手,我想告诉您,您可以通过单击该答案旁边的复选标记接受您认为最有帮助的答案。
  • 一般情况下:请在第一个引号后设置前导斜杠/preg_replace("/\...)

标签: php regex preg-replace


【解决方案1】:

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

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

见:preg_replace manual page

【讨论】:

    【解决方案2】:

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

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

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

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

    这样的事情应该可以工作。任何其他问题,去PHP's preg_replace() documentation - 真的很好。

    【讨论】:

      【解决方案3】:

      试试:

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

      括号字符是正则表达式中的特殊字符。您需要转义它们才能使用它们。

      【讨论】:

        【解决方案4】:

        你快到了。您正在使用:

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

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

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

        【讨论】:

        • 明白了。所以分隔符可以是任何东西?我已经看到 '#' 和 '/' 都有效。
        • 是的,你也可以使用~~、@@、{}、##、//、!!还有很多 :)。但通常我们使用一个没有出现在模式中的分隔符。
        • 感谢您用# 括起来的提示,这在任何 php 正则表达式测试器网站上都没有提及。
        【解决方案5】:

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

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

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

        。 . 为我工作。

        【讨论】:

        • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
        • 你在回答什么问题?
        • @Toto 我编辑了答案,这回答了问题:Delimiter must not be alphanumeric or backslash.,
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多