根据http://www.regular-expressions.info,
您可以在使用纯ASCII的正则表达式引擎中考虑
\X
点的Unicode版本。
这是否意味着它会匹配任何可能的Unicode代码点?
答案 0 :(得分:7)
该网站的描述非常好:
\ X匹配单个Unicode字形,无论是使用组合标记编码为单个代码点还是多个代码点。字形最接近于“角色”的日常概念。 \ X匹配à编码为U + 0061 U + 0300,à编码为U + 00E0,©等
因此,使其具有Unicode感知能力的是它可以匹配几个代码点,当它们组合成一个可见的“东西”(字母)时。
有关详细信息,请参阅Wikipedia's page on Combining Characters,例如,它列出了上面提到的U + 0300代码点。
答案 1 :(得分:3)
这匹配Unicode 扩展字形集群。
\X
非常匹配 以及正常(非Unicode程序员)使用会考虑的问题 单个字符。举个例子,考虑某种G 变音符号,如箭头。没有这样的单一字符 Unicode,但可以使用G后跟Unicode组成 “将箭头组合在下面”,并将显示 支持Unicode的软件,就好像它是一个单个字符一样。助记符:扩展的Unicode字符。
来自PCRE man pages(2012):
PCRE实现了比Perl更简单的\ X版本,它改为使\ X匹配Unicode称之为“扩展字形集群”。 这比扩展的Unicode序列更复杂,即 什么PCRE匹配。
[...]
\ X扩展的Unicode序列
[...]
\ X转义匹配任意数量的形成扩展Unicode序列的Unicode字符。 \ X等同于
(?>\PM\pM*)
也就是说,它匹配没有“mark”属性的字符, 后跟零个或多个带有“mark”属性的字符,和 将序列视为原子组(见下文)。人物角色 “mark”属性通常是影响的标记 前面的字符。它们都没有小于256的代码点,所以在 8位非UTF-8模式\ X匹配任何一个字符。
请注意,最新版本的Perl已更改\ X以匹配 Unicode称为“扩展字形集群”,它具有更多 复杂的定义。
PCRE man pages的后期版本(2015):
扩展的字形簇
\X
转义符与形成的任意数量的Unicode字符匹配 “扩展的字形集群”,并将序列视为原子序列 小组(见下文)。直至并包括版本8.31,PCRE匹配 一个更简单的定义,相当于(?>\PM\pM*)
也就是说,它匹配没有“mark”属性的字符, 后跟带有“mark”属性的零个或多个字符。 具有“mark”属性的字符通常是非间距的 影响前一个角色的重音。
这个简单的定义在Unicode中扩展为包含更多 通过赋予每个字符a复杂的复合字符 字形破坏属性,并创建使用这些属性的规则 用于定义扩展字形的边界的属性 集群。在早于8.31的PCRE版本中,
\X
匹配其中一个 这些集群。
\X
始终匹配至少一个字符。然后它决定是否 根据以下规则添加其他字符 结束集群:
在主题字符串的末尾结束。
不要在CR和LF之间结束;否则在任何控制字符之后结束。
不要破坏韩文(朝鲜语脚本)的音节序列。韩文字符有五种类型:L,V,T,LV和LVT。安.L 字符后面可以跟一个L,V,LV或LVT字符;一个LV或 V字符后面可以跟一个V或T字符; LVT或T. 字符可能只有T字符。
在扩展字符或间距标记之前不要结束。带有“mark”属性的字符总是具有“extend” 字形破坏属性。
在前置字符后不要结束。
- 醇>
否则,请结束群集。