根据http://www.regular-expressions.info,
您可以考虑
\X
使用纯ASCII的正则表达式引擎中的Unicode版本的点.
这是否意味着它将匹配任何可能的Unicode代码点?
该网站的描述非常好:
\ X匹配单个Unicode字形,无论是使用组合标记编码为单个代码点还是多个代码点.字形最接近于"角色"的日常概念.\ X匹配à编码为U + 0061 U + 0300,à编码为U + 00E0,©等.
因此,使其具有Unicode感知的是,当它们组合成单个可见的"事物"(字形)时,它可以匹配多个代码点.
有关更多详细信息,请参阅维基百科关于组合字符的页面,它列出了上面提到的U + 0300代码点.
来自Perl 正则表达式手册:
这与 Unicode扩展字素簇匹配。
\X
与正常(非 Unicode 程序员)使用所认为的单个字符非常匹配。例如,考虑带有某种变音符号的 G,例如箭头。Unicode 中没有这样的单个字符,但可以通过使用 G 后跟 Unicode“COMBINING UPWARDS ARROW BELOW”来组成一个字符,并且可以由支持 Unicode 的软件将其显示为单个字符。助记符:扩展的 Unicode 字符。
摘自PCRE 手册页(2012):
PCRE 实现了比 Perl 更简单的 \X 版本,它进行了更改以使 \X 匹配 Unicode 所称的“扩展字素簇”。这比 PCRE 匹配的扩展 Unicode 序列更复杂。
[...]
\X 扩展的 Unicode 序列
[...]
\X 转义符匹配形成扩展 Unicode 序列的任意数量的 Unicode 字符。\X 相当于
Run Code Online (Sandbox Code Playgroud)(?>\PM\pM*)
也就是说,它匹配不带“mark”属性的字符,后跟零个或多个具有“mark”属性的字符,并将该序列视为原子组(见下文)。具有“mark”属性的字符通常是影响前一个字符的重音符号。它们的代码点都不小于 256,因此在 8 位非 UTF-8 模式下 \X 匹配任何一个字符。
请注意,Perl 的最新版本已更改 \X 以匹配 Unicode 所谓的“扩展字素簇”,它具有更复杂的定义。
PCRE 手册页的最新版本(2015):
扩展字素簇
转义
\X
匹配形成“扩展字素簇”的任意数量的 Unicode 字符,并将序列视为原子组(见下文)。在版本 8.31 之前(包括版本 8.31),PCRE 匹配了一个更早、更简单的定义,该定义相当于Run Code Online (Sandbox Code Playgroud)(?>\PM\pM*)
也就是说,它匹配一个不带“mark”属性的字符,后跟零个或多个具有“mark”属性的字符。具有“mark”属性的字符通常是影响前一个字符的无间距重音符号。
这个简单的定义在 Unicode 中得到了扩展,通过为每个字符提供一个字素破坏属性,并创建使用这些属性来定义扩展字素簇边界的规则,可以包含更复杂的复合字符类型。在高于 8.31 的 PCRE 版本中,
\X
匹配这些集群之一。
\X
始终匹配至少一个字符。然后根据以下结束簇的规则决定是否添加附加字符:
在主题字符串的末尾结束。
不要在 CR 和 LF 之间结束;否则在任何控制字符之后结束。
请勿破坏 Hangul(韩文)音节序列。朝鲜文字符有五种类型:L、V、T、LV 和 LVT。L 字符后可以跟 L、V、LV 或 LVT 字符;LV 或 V 字符后可以跟 V 或 T 字符;LVT 或 T 字符后面只能跟一个 T 字符。
不要在扩展字符或间隔标记之前结束。具有“mark”属性的字符始终具有“extend”字素破坏属性。
不要在前缀字符之后结束。
否则,结束集群。