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

Php 警告:preg_replace()[function.preg replace]:编译失败:在偏移量1处没有要重复的内容,php,regex,preg-replace,Php,Regex,Preg Replace,有人能帮忙调试这个错误吗 警告:preg_replace()[function.preg replace]:编译失败: 在偏移量1处无需重复 //生成uid 函数gen\u uid($len=40){ $hex=md5(“what.uniqid(“,true)); $pack=pack('H*',$hex); $tmp=base64_编码($pack); $uid=preg#u replace(“#(*UTF8)[^A-Za-z0-9]#”,”,$tmp); $len=最大值(4,最小值(128

有人能帮忙调试这个错误吗

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

//生成uid
函数gen\u uid($len=40){
$hex=md5(“what.uniqid(“,true));
$pack=pack('H*',$hex);
$tmp=base64_编码($pack);
$uid=preg#u replace(“#(*UTF8)[^A-Za-z0-9]#”,”,$tmp);
$len=最大值(4,最小值(128,$len));
while(strlen($uid)<$len)
$uid.=gen_uid(22);
返回substr($uid,0,$len);
}

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

*
在正则表达式中意味着匹配前一个字符0次或多次,而
启动捕获组。因此,
*
无需重复,因为
*
前面的是一个
),它本身无法重复,因此出现此警告

要修复它,只需转义
*
,如下所示:

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

事实上,这似乎“很有效”您的本地计算机上的警告正在发出警报。请在您的本地计算机上也启用警告,并调查为什么它会工作,因为它会因回答中提到的原因而失败。@eis,我的本地坚持不显示警告或错误。您应该启用它们,所以它会…@eis,我使用ini_集('display_errors','on')启用它们;error_reporting(E_ALL);我发现这与服务器上使用不同的正则表达式编译器的PHP有关。
$uid = preg_replace("#(\*UTF8)[^A-Za-z0-9]#", "", $tmp);