警告:preg_replace()[function.preg replace]:编译失败:在偏移量1处没有可重复的内容


Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 1

有人能帮助调试这个错误吗?

警告:preg_replace()[function.preg replace]:编译失败:偏移1 无需重复

//Generate uid
    function gen_uid($len=40) {
        $hex = md5("what" . uniqid("", true));
        $pack = pack('H*', $hex);
        $tmp =  base64_encode($pack);
        $uid = preg_replace("#(*UTF8)[^A-Za-z0-9]#", "", $tmp);
        $len = max(4, min(128, $len));
        while (strlen($uid) < $len)
            $uid .= gen_uid(22);
        return substr($uid, 0, $len);
    }

是什么原因造成的?这是PHP问题还是其他问题?该应用程序在我的本地计算机上运行良好,但在服务器上运行不好。

正则表达式中的*表示与前一个字符匹配0次或更多次,而(则启动一个捕获组。因此,*没有什么可重复的,因为*之前的是(,它本身无法重复,因此发出此警告。

要修复它,只需退出*,如下所示:

$uid = preg_replace("#('*UTF8)[^A-Za-z0-9]#", "", $tmp);