PHP preg_replace()编译失败:缺少)

Man*_*era 1 php preg-replace

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

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);
    }
Run Code Online (Sandbox Code Playgroud)

PHP给出错误:

警告:preg_replace()[function.preg-replace]:编译失败:丢失)在第18行的 C:\ wamp\www\extlogin\app \ni\inc\classes\cfiletree.php中的偏移量7处

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

谢谢.

Bli*_*ixt 8

最有可能DIRECTORY_SEPARATOR\意思是它会逃避)而不是匹配反斜杠.你需要逃脱,DIRECTORY_SEPARATOR以便它成为\\正则表达式.

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

preg_quote(DIRECTORY_SEPARATOR, '#');
Run Code Online (Sandbox Code Playgroud)

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