据http://www.regular-expressions.info,RegEx中的表达式 X匹配的内容是什么?
你可以考虑
\X
点的在使用普通的ASCII正则表达式引擎的Unicode版本。
这是否意味着它将匹配任何可能Unicode代码点?
据http://www.regular-expressions.info,RegEx中的表达式 X匹配的内容是什么?
你可以考虑
\X
点的在使用普通的ASCII正则表达式引擎的Unicode版本。
这是否意味着它将匹配任何可能Unicode代码点?
该网站的描述是相当不错的:
\ x匹配单个Unicode字形,无论是编码为一个单一的代码点或使用组合标记多个代码点。一个字形与“角色”的日常概念非常相似。 \ X匹配一个编码为U + 0061 U + 0300,A编码为U + 00E0,©等
所以,这使得它也支持Unicode的事情是,它可以匹配几个代码点当那些结合到一个可见的“事物”(字素)时。
更多细节参见Wikipedia's page on Combining Characters,它列出上面提到的,例如以U + 0300码点。
这符合一个Unicode 扩展字形簇。
\X
比赛相当 以及什么正常(非Unicode的程序员)的使用会考虑 单个字符。作为一个例子,考虑具有某种 音调符号标记,的某个G诸如箭头。 Unicode中没有这样的单个字符,但可以通过使用G后跟一个Unicode “合并向下箭头”来组成一个字符,并且可以通过 显示Unicode感知软件,就好像它是单个字符一样。助记符:扩展的Unicode字符。
而且从PCRE man pages(2012):
PCRE实现了一个比Perl更简单的版本\ X,它改变,使\ X匹配什么统一称之为 “扩展字形集群”。 这是一个比一个扩展的Unicode序列,这是 什么PCRE匹配更加复杂。
[...]
\ X的扩展的Unicode序列
[...]
的\ X逃逸匹配任何数目的Unicode字符形成扩展Unicode序列。\ X相当于
(?>\PM\pM*)
即,它没有“mark”属性的字符,后面的零个或多个字符与“标记”属性,并且 对待的序列作为原子团( 匹配见下文)。带有 字符的“标记”属性通常是影响 前一字符的重音。它们都没有小于256的码点,因此在 8位非UTF-8模式\ X匹配任何一个字符。
请注意,Perl的最新版本已将\ X更改为匹配 Unicode所称的“扩展字形群集”,它具有更复杂的定义。
的PCRE man pages后来的版本(2015):
扩展字形簇
的
\X
逃逸匹配任何数目的形成 “扩展字形集群” Unicode字符,并设为该序列作为原子 组(见下文)。直到并包括发行8.31,PCRE匹配 的EAR-利尔,简单的定义是相当于(?>\PM\pM*)
也就是说,它匹配的字符没有“mark”属性,后面的零个或多个字符与 “标记”属性。 带有“标记”属性的字符通常是非空格 影响前一个字符的重音。
这个简单的定义是在延长的Unicode通过给每个字符 字形断裂性,并且创建使用这些 属性来定义扩展字形 簇的边界的规则,以包括更多 compli- cated种复合字符的。在晚于8.31的PCRE版本中,
\X
与这些集群中的一个 匹配。
\X
总是匹配至少一个字符。然后,它判定 是否根据对于 以下规则结束簇添加附加字符:在对象字符串的末尾
结束。
不要在CR和LF之间结束;否则在任何控制字符后结束。
不要打破韩文(韩文脚本)音节序列。韩文字符有五种类型:L,V,T,LV和LVT。字符后面可能跟有L,V,LV或LVT字符;一个LV字符或一个V字符后可以跟一个V或T字符;一个LVT或T字符可能只有一个T字符。
在扩展字符或间距标记之前不要结束。带有“标记”属性的字符总是具有“扩展”字形破坏属性。
不要在prepend字符后结束。
否则,结束集群。