【问题标题】:PHP preg_replace() compilation failed: missing )PHP preg_replace() 编译失败:缺少)
【发布时间】:2010-11-11 15:39:09
【问题描述】:

我有以下函数来返回脚本的干净路径。

function cleanPath($path) {
        $path = (string) $path;
        $path = preg_replace(
            array(
            '#[\n\r\t\0]*#im',
            '#/(\.){1,}/#i',
            '#(\.){2,}#i',
            '#(\.){2,}#i',
            '#('.DIRECTORY_SEPARATOR.'){2,}#i'
            ),
            array(
            '',
            '',
            '',
            '/'
            ),
            $path
            )
        ;
        return rtrim($path,DIRECTORY_SEPARATOR);
    }

PHP 报错:

警告:preg_replace() [function.preg-replace]:编译 failed: missing ) at offset 7 in C:\wamp\www\extlogin\app\ni\inc\classes\cfiletree.php 在线 18

关于什么是错的以及如何解决它的任何想法?

谢谢。

【问题讨论】:

    标签: php preg-replace


    【解决方案1】:

    DIRECTORY_SEPARATOR 很可能是 \,这意味着它将转义 ) 而不是匹配反斜杠。您需要转义 DIRECTORY_SEPARATOR 以便它在正则表达式中变为 \\

    转义正则表达式中的字符串最安全的方法是使用preg_quote

    preg_quote(DIRECTORY_SEPARATOR, '#');
    

    第二个参数'#' 是您用于正则表达式的分隔符,在您的情况下为#

    【讨论】:

    • 有没有办法捕捉到那个特定的错误,即你可以在使用之前“测试”一个模式吗?
    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多