2012-03-29 108 views

回答

6

该网站的描述是相当不错的:

\ x匹配单个Unicode字形,无论是编码为一个单一的代码点或使用组合标记多个代码点。一个字形与“角色”的日常概念非常相似。 \ X匹配一个编码为U + 0061 U + 0300,A编码为U + 00E0,©等

所以,这使得它也支持Unicode的事情是,它可以匹配几个代码点当那些结合到一个可见的“事物”(字素)时。

更多细节参见Wikipedia's page on Combining Characters,它列出上面提到的,例如以U + 0300码点。

2

Perl regex manual

这符合一个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总是匹配至少一个字符。然后,它判定 是否根据对于 以下规则结束簇添加附加字符:在对象字符串的末尾

  1. 结束。

  2. 不要在CR和LF之间结束;否则在任何控制字符后结束。

  3. 不要打破韩文(韩文脚本)音节序列。韩文字符有五种类型:L,V,T,LV和LVT。字符后面可能跟有L,V,LV或LVT字符;一个LV字符或一个V字符后可以跟一个V或T字符;一个LVT或T字符可能只有一个T字符。

  4. 在扩展字符或间距标记之前不要结束。带有“标记”属性的字符总是具有“扩展”字形破坏属性。

  5. 不要在prepend字符后结束。

  6. 否则,结束集群。

相关问题