【发布时间】:2019-08-02 03:25:00
【问题描述】:
我正在尝试创建一个正则表达式,它将匹配 unicode 块中的任何字符 - 特别是 Mathematical Alphanumeric Symbols 块。
此处的目的是识别使用 Unicode 字符的内容的用途,以便在其文本上获得不同的格式,例如粗体或斜体文本,但通常不受支持。有很多网站,like this one 可以帮助用户转换文本。
我尝试使用速记属性代码,但它似乎与我期望的块中的所有字符都不匹配。
preg_match('/\p{Sm}/i', '????') === 1; // false
似乎 PHP 也不支持命名变体,所以我不能做类似\p{Math} 的事情。
我相信我需要定位块范围 - 从 U+1D400 - U+1D7FF,但我无法弄清楚如何正确构建这个正则表达式。这就是我认为我可以让它工作的方式,但它似乎不起作用。
preg_match('/\x{1D400}-\x{1D7FF}/i', '????') === 1; // false
我希望这些字符都不匹配(直接在我的键盘上输入):
abcdefghijklmnopqrstuvwxyz0123456789
我希望这些字符中的每一个都匹配(与上面相同,使用上面的链接转换为数学粗体):
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
【问题讨论】:
-
您假定了错误的属性。
????是Nd,而不是Sm:› uniprops ????U+1D7EE ‹????› \N{MATHEMATICAL SANS-SERIF BOLD DIGIT TWO}\w \d \pN \p{Nd}All Alnum X_POSIX_Alnum Any Assigned ID_Continue Is_IDC Changes_When_NFKC_Casefolded CWKCF Common Zyyy Decimal_Number X_POSIX_Digit Digit Nd N Gr_Base Grapheme_Base Graph X_POSIX_Graph GrBase IDC Math Math_Alphanum Mathematical_Alphanumeric_Symbols InMathAlphanum Number Print X_POSIX_Print Unicode Word X_POSIX_Word XID_Continue XIDC