【问题标题】:ereg_replace vs preg_replaceereg_replace 与 preg_replace
【发布时间】:2012-02-20 17:00:55
【问题描述】:
<?php
$string = '\n \n \n \n';
$patterns = '/\n/';
$replacements = '/\\n/';
echo preg_replace($patterns, $replacements, $string);
?>

这段代码似乎不起作用,任何关于为什么会发生的建议。它根本不回应任何东西。我可以让它与 ereg 一起工作,但想改用 preg。

【问题讨论】:

    标签: php regex preg-replace


    【解决方案1】:

    PHP 文档:ereg has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

    无论如何,您的 $patterns 没有正确转义。您需要四个\ - 见下文:

    <?php
    $string = '\n \n \n \n';
    $patterns = '/\\\\n/';
    $replacements = '/\\n/';
    echo preg_replace($patterns, $replacements, $string); // string(19) "/\n/ /\n/ /\n/ /\n/"
    ?>
    

    【讨论】:

      【解决方案2】:

      这里有很多问题...

      • 您是否尝试创建由换行符组成的字符串? '\n \n \n \n' 不是办法,它不起作用。使用"\n \n \n \n",阅读PHP官方关于字符串的手册here

      • 您的模式未正确转义。试试'/\\n/',反正我不确定你的版本不行。

      • 更换'/\\n/' 的原因是什么? 请提供输入字符串的示例和所需的输出。

      如果您尝试转义字符串以将它们保存在数据库中,那么您完全走错路了。 Google for php database escaping,并阅读有关 mysql_escape_string() 的信息(或者如果您不使用 MySQL,则使用等效的)。有一些功能可以做到这一点,您必须使用它们。您不能依赖(或者没有理由这样做)使用正则表达式的自定义函数。

      【讨论】:

      • 我正在尝试转义用户输入,因此如果他们在数据库中更新时输入 \n ,则不仅仅是 \n 而是 \\n 。
      • @Mintuz 好的,所以你完全走错路了。我编辑我的答案,如果我对你的意图是正确的,请接受它。
      【解决方案3】:

      如果您的意思是\n 是换行符,则不能使用单引号 ('),而是使用双引号 (")

      【讨论】:

        猜你喜欢
        • 2011-01-27
        • 2012-10-01
        • 2012-07-20
        • 2012-03-09
        • 2012-01-28
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多