PHP 7.3更新-preg编译失败

时间:2019-05-09 18:33:59

标签: php regex preg-replace

升级到PHP 7.3后出现此错误

这是什么意思?

  

preg_replace():编译失败:字符类中的范围无效   在偏移量5 /var/www/...(97)#0 [内部功能]:{closure}(2,   'preg_replace():...','/ var / www / dyntes ...',97,数组)#1   /var/www/...(97):   preg_replace('/ [^ \ pL-\ / ,. \ d \ ...','','d

$str = preg_replace('/[^\pL'.$allow_chars.']/', '', $str);

1 个答案:

答案 0 :(得分:2)

只需使用preg_quote转义$allow_chars中的特殊字符:

$str = preg_replace('/[^\pL'.preg_quote($allow_chars).']/', '', $str);

根据评论(您不能使用preg_quote),这是完成工作的另一种方法:

如果连字符位于$allow_char的第一位,则可以执行以下操作:

$str = preg_replace('/[^'.preg_quote($allow_chars).'\pL]/', '', $str);

不需要在字符类中排在首位的连字符。