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

时间:2009-07-17 09:30:02

标签: 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);
    }

PHP给出错误:

  

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

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

谢谢。

1 个答案:

答案 0 :(得分:8)

最有可能DIRECTORY_SEPARATOR\,这意味着它将逃脱)而不是匹配反斜杠。您需要转义DIRECTORY_SEPARATOR,使其在正则表达式中变为\\

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

preg_quote(DIRECTORY_SEPARATOR, '#');

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