事实证明,这两个序列(以前有效)
"`([\n\A;]+)\/\*(.+?)\*\/`ism" => "$1", // error
"`([\n\A;\s]+)//(.+?)[\n\r]`ism" =>"$1\n", // error
现在在 PHP 7.3 中抛出错误
警告:preg_replace():编译失败:字符类偏移量 4 中的转义序列无效
上下文:考虑这个 snipit,它从字符串中删除 CSS 注释
$buffer = ".selector {color:#fff; } /* some comment to remove*/";
$regex = array(
"`^([\t\s]+)`ism"=>'',
"`^\/\*(.+?)\*\/`ism"=>"",
"`([\n\A;]+)\/\*(.+?)\*\/`ism"=>"$1", // 7.3 error
"`([\n\A;\s]+)//(.+?)[\n\r]`ism"=>"$1\n", // 7.3 error
"`(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+`ism"=>"\n"
);
$buffer = preg_replace(array_keys($regex),$regex,$buffer);
//returns cleaned up $buffer value with pure css and no comments
参考:https : //stackoverflow.com/a/1581063/1293658
Q1 -在这种情况下,正则表达式有什么问题吗?这个线程似乎表明它只是一个错位的反斜杠 https://github.com/thujohn/twitter/issues/250
Q2 -这是 PHP 7.3 错误还是此代码中的 REGEX 序列有问题?
LEATH