警告:preg_replace()[function.preg-replace]:编译失败:在偏移量1处不重复

时间:2012-09-04 15:08:23

标签: php regex preg-replace

有人可以帮助调试此错误吗?

  

警告: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问题还是其他什么?应用程序在我的本地计算机上运行正常但在服务器上运行不正常

1 个答案:

答案 0 :(得分:9)

正则表达式中的

*表示将前一个字符匹配0次或更多次,而(启动捕获组。因此,*无需重复,因为*之前的内容是(,它不能自行重复,因此会发出警告。

要修复它,只需转义*,就像这样:

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