javascript - Unicode 正则表达式:编译失败:字符类中的范围无序
问题描述
我将来自https://twemoji.maxcdn.com/v/latest/twemoji.js的正则表达式转换为匹配与表情符号相关的 Unicode 字符从 javascript 到 php。
当我使用 regex101.com 对其进行测试时,转换后的正则表达式按预期工作
但是,当我在本地环境中进行测试时,它不起作用。
你可以在这里看到一个工作示例https://regex101.com/r/IuIhBF/1
这是PHP版本。http://sandbox.onlinephpfunctions.com/code/3bd5933f5230fc1c45104b7eccd9379b68870016
我尝试更改 preg_match_all 标志。将 u 添加到正则表达式 ex: /*****/u
无法让它工作
如果有人可以帮助我解决该错误,那就太好了:编译失败:偏移量 306 处的字符类范围乱序。
解决方案
此表达式似乎正在处理您的样本,带有一个u
标志:
$re = '/[\x{1f300}-\x{1f5ff}\x{1f900}-\x{1f9ff}\x{1f600}-\x{1f64f}\x{1f680}-\x{1f6ff}\x{2600}-\x{26ff}\x{2700}-\x{27bf}\x{1f1e6}-\x{1f1ff}\x{1f191}-\x{1f251}\x{1f004}\x{1f0cf}\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{3299}\x{303d}\x{00a9}\x{00ae}\x{2122}\x{23f3}\x{24c2}\x{23e9}-\x{23ef}\x{25b6}\x{23f8}-\x{23fa}]/u';
$str = 'Time in emoji is very expressive. allowed us to communicate time very easily.
Next up was negation. ❌️ means “No talk.”';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);
该表达式在regex101.com的右上角面板上进行了说明,如果您希望探索/简化/修改它,并且在此链接中,您可以查看它如何与一些示例输入匹配,如果您愿意的话。
参考
推荐阅读
- java - 使用重绘时它看起来像这样,为什么?
- linux - egrep 命令查找长度为 3 的倍数的子字符串
- excel - 无法在 Excel 中保存下一条记录的数据。第一个被覆盖。我正在使用 Tkinter 将数据附加到数据框,然后添加到 excel
- java - 为什么在 Double 中添加了指数科学计数法
- sql - SQL如何在WHERE子句中为字符串“1-3”使用变量
- html - 我想将上传的图片显示到html图片标签
- javascript - 有人可以解释一下下面条件运算符的语法以及它到底在做什么
- python-3.x - 为什么这个函数返回所有 True 值?
- php - 每月回显分数,即使月份没有数据
- c++ - 我们如何在线程中使用参数