证明这两个序列(以前都有效)
"`([\n\A;]+)\/\*(.+?)\*\/`ism" => "$1", // error
"`([\n\A;\s]+)//(.+?)[\n\r]`ism" =>"$1\n", // error
Run Code Online (Sandbox Code Playgroud)
现在在PHP 7.3中引发错误
警告:preg_replace():编译失败:转义序列在字符类偏移量4中无效
语境:考虑一下这个技巧,它可以从字符串中删除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
Run Code Online (Sandbox Code Playgroud)
请参阅:https://stackoverflow.com/a/1581063/1293658
Q1 -任何想法什么是错,在这种情况下,正则表达式?该线程似乎表明它只是放错了反斜杠 https://github.com/thujohn/twitter/issues/250
Q2 -这是一个PHP 7.3的错误或与此代码正则表达式序列的问题?
我需要/*...*/从 JSON 数据中删除所有样式注释。我如何使用正则表达式来实现这样的字符串值
{
"propName": "Hello \" /* hi */ there."
}
Run Code Online (Sandbox Code Playgroud)
保持不变?