【问题标题】:PHP preg_replacePHP preg_replace
【发布时间】:2013-08-03 18:34:52
【问题描述】:

我使用netbeans,我尝试用\\ 替换\,但失败了,它无法逃脱\\ 字符。

这不是 Netbeans 问题,而是 PHP 问题。

preg_replace('\','\\','text to \ be parsed');

有什么解决办法吗?

【问题讨论】:

    标签: php regex preg-replace


    【解决方案1】:

    使用 4 个反斜杠,请不要忘记分隔符:

    echo echo preg_replace('~\\\\~','\\\\\\\\','text to \\ be parsed');

    Online demo

    解释: PHP解析\\\\时会转义两次\\,也就是变成\\,现在当PHP传递给正则引擎时,会收到@987654326 @ 表示\

    【讨论】:

    • @IonutFlaviusPogacian 我提供了一个在线演示和一些解释,以消除所有疑虑。我们正在谈论正则表达式。
    • 是的,很好 - 它有效,现在解释清楚了。 +1
    • regex 也可以,chr 也可以,取你想要的一种解决方案
    • 但是,如果只需要转义 1 个字符,我建议使用 chr 函数
    • @IonutFlaviusPogacian 好吧,我希望这是实际正则表达式的简化版本,否则一个简单的str_replace() 就可以完成这项工作。为什么我不喜欢chr(92) 技术是因为在实际的正则表达式中你会有一个丑陋的连接。虽然这只是一个偏好:)
    【解决方案2】:

    尝试 php chr() 函数并告诉 preg_replace \\\ 的 char ascii 代码。

    chr function

    ascii code table

    <?php
    echo chr(52) . "<br>"; // Decimal value
    echo chr(052) . "<br>"; // Octal value
    echo chr(0x52) . "<br>"; // Hex value
    
    preg_replace(chr(1),chr(2),'text'),
    
    ?>
    

    【讨论】:

      【解决方案3】:

      这可行:(使用 str_replace() 而不是 preg_replace())

      $str = "text to \ be parsed";
      
      $str = str_replace('\\', '\\\\', $str);
      
      echo $str;
      

      【讨论】:

        猜你喜欢
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 2013-07-17
        • 2015-09-22
        • 2010-12-10
        • 2012-02-11
        • 2011-08-24
        相关资源
        最近更新 更多