【问题标题】:Regular expression to match unicode block, or index range匹配 unicode 块或索引范围的正则表达式
【发布时间】: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

标签: php regex unicode pcre


【解决方案1】:

我猜这个表达式可能有效,但不确定:

$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 的右上方面板中进行了解释,如果您想探索/简化/修改它,在this link 中,您可以查看它如何与一些示例输入进行匹配,如果您愿意的话。


参考

RegEx for Mathematical Alphanumeric Symbols

Unicode Regular Expressions

【讨论】:

  • 这很好用 - 也感谢额外的链接,现在我已经有了一个工作基础,玩起来会更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多