Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Unicode正则表达式:编译失败:字符类中的范围顺序错误_Javascript_Php_Regex - Fatal编程技术网

Javascript Unicode正则表达式:编译失败:字符类中的范围顺序错误

Javascript Unicode正则表达式:编译失败:字符类中的范围顺序错误,javascript,php,regex,Javascript,Php,Regex,我将从中提取的一个正则表达式从javascript转换为php,该正则表达式匹配与emojis相关的Unicode字符 当我使用regex101.com测试它时,转换后的正则表达式可以正常工作 但是,当我在本地环境中测试时,它不起作用 您可以在这里看到一个工作示例 这是PHP版本 我试着改变preg_match_所有标志。 将u添加到正则表达式ex:/*****/u 不能让它工作 如果有人能帮我解决这个错误那就太好了: 编译失败:偏移量306处字符类中的范围无序。此表达式似乎适用于您的示例,带有

我将从中提取的一个正则表达式从javascript转换为php,该正则表达式匹配与emojis相关的Unicode字符

当我使用regex101.com测试它时,转换后的正则表达式可以正常工作

但是,当我在本地环境中测试时,它不起作用

您可以在这里看到一个工作示例

这是PHP版本

我试着改变preg_match_所有标志。 将u添加到正则表达式ex:/*****/u

不能让它工作

如果有人能帮我解决这个错误那就太好了:
编译失败:偏移量306处字符类中的范围无序。

此表达式似乎适用于您的示例,带有
u
标志:

[代码>元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元x{1f170}-\x{1f171}\x{1f17e}-\x{1f17f}\x{1f18e}\x{3030}\x{2b50}\x{2b55}\x{2934}-\x{2935}\x{2b05}-\x{2b07}\x{2b1b}\x{2b1c}\x{3297}\x}{2122}\x{23f3}\x{24c2}\x{23e9}-\x{23ef}\x{25b6}\x{23f8}-\x{23fa}]/u'; $str='表情符号中的时间非常有表现力。对于表情符号,您应该使用Utf-16代理项对正则表达式。
utf-8/32正则表达式太慢了

有关Unicode版本12表情规则和测试,请参见此链接。
它需要3.4秒,因此如果超时(默认值为2秒),只需增加超时时间
在设置中

相比之下,utf-8/32正则表达式几乎需要40秒(需要//u标志)

所以,一定要坚持使用emoji正则表达式的代理项对


有趣的是,PHP 5.x上针对该代码的错误可能更具信息性:
编译失败:\x{}或\o{}中的字符值在偏移量10处太大。缺少
\u
(PCRE\u UTF8)flag.Think我在测试PHP paste bin的例子时把它搞坏了。这个正则表达式遗漏了很多表情符号,而且速度非常慢,Unicode表情符号测试文本几乎需要30秒。。