php - 匹配 unicode 块或索引范围的正则表达式
问题描述
我正在尝试创建一个正则表达式,它将匹配 unicode 块中的任何字符 - 特别是数学字母数字符号块。
此处的目的是识别使用 Unicode 字符的内容的使用,以便在其文本上获得不同的格式,例如粗体或斜体文本,但通常不受支持。有很多网站,比如这个可以帮助用户转换文本的网站。
我尝试使用速记属性代码,但它似乎与我期望的块中的所有字符都不匹配。
preg_match('/\p{Sm}/i', '') === 1; // false
PHP 似乎也不支持命名的变体,所以我不能做类似\p{Math}
.
我相信我需要定位块范围 - 从 U+1D400 - U+1D7FF,但我无法弄清楚如何正确构建这个正则表达式。这就是我认为我会让它工作的方式,但它似乎不起作用。
preg_match('/\x{1D400}-\x{1D7FF}/i', '') === 1; // false
我希望这些字符都不匹配(直接在我的键盘上输入):
abcdefghijklmnopqrstuvwxyz0123456789
我希望这些字符中的每一个都匹配(与上面相同,使用上面的链接转换为数学粗体):
解决方案
我猜这个表达式可能有效,但不确定:
$re = '/[\x{1D400}-\x{1D7FF}]+/su';
$str = '';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);
\p{S} or \p{Symbol}: math symbols, currency signs, dingbats, box-drawing characters, etc.
\p{Sm} or \p{Math_Symbol}: any mathematical symbol.
\p{Sc} or \p{Currency_Symbol}: any currency sign.
\p{Sk} or \p{Modifier_Symbol}: a combining character (mark) as a full character on its own.
\p{So} or \p{Other_Symbol}: various symbols that are not math symbols, currency signs, or combining characters.
该表达式在regex101.com的右上角面板上进行了说明,如果您希望探索/简化/修改它,并且在此链接中,您可以查看它如何与一些示例输入匹配,如果您愿意的话。
参考
推荐阅读
- android - 如何在 Horizontal ScrollView 或 RecycleView 中突出显示中心元素?
- python - Python 包需要 freeglut 作为依赖
- python - subprocess.Popen 尝试运行时出现 python 错误。在cmd中工作正常
- docker - Docker 容器的 npm 更新检查失败
- r - 如何使用 usmap 标记数字而不是名称?
- php - WAMP 上的 Laravel(Skote 安装)- 不支持 HTTP 方法
- git - 存储库 docker.io/not found:不存在或没有拉取访问权限
- tableau-api - 计算画面中的总百分比
- sql-server - 使用记录集将数据从 Oracle 传输到 SQL Server
- java - 如何从输入计算一组计算的平均值和最大值/最小值?