您正在从Perl 5.22.0查看此文档的版本。查看最新版本

目录

名称

Unicode::Collate-Unicode排序算法

简介

使用Unicode::排序;#构造$Collator=Unicode::整理->新(%裁剪);#排序@sorted=$Collator->排序(@not_sorted);#比较$result=$Collator->cmp($a,$b);#返回1、0或-1。

注:中的字符串@未排序(_S),美元十亿美元根据Perl的Unicode支持进行解释。请参见perlunicode码,珍珠岩,珀鲁纽特,珍珠棉,utf8接口。否则您可以使用预处理或者应该提前解码。

描述

本模块是Unicode技术标准#10(也称为UTS#10)-Unicode排序算法(也称为UCA)的实现。

建造师和裁缝

这个新的方法返回一个collator对象。如果在没有参数的情况下调用new(),那么collator应该执行默认排序。

$Collator=Unicode::整理->新建(UCA_Version=>$UCA_Version,alternate=>$alternate,“变量”的#别名向后=>$levelNumber、#或\@levelNumbersentry=>$元素,hangul_terminator=>$term_primary_weight,最高FFFF=>$bool,相同=>$bool,ignoreName=>qr/$ignoreName/,ignoreChar=>qr/$ignoreChar/,ignore_level2=>$bool,片假名在平假名之前=>$bool,level=>$collationLevel,long_contraction=>$bool,minimalFFFE=>$bool,规范化=>$normalization_form,overrideCJK=>\&overrideCJK,overrideHangul=>\&override Hangul,预处理=>\&预处理,重排=>\@charList,rewrite=>\&rewrite,suppress=>\@charList,table=>$filename,undefName=>qr/$undefName/,undefiChar=>qr/$undefiChar/,upper_before_lower=>$bool,variable=>$variable,);
UCA_版本

如果给定UCA的修订号(以前称为“跟踪版本”),则会在排序时模拟该修订的行为。如果省略UCA_版本()使用。

支持以下修订。默认值为30。

UCA Unicode标准DUCET(@版本)-------------------------------------------------------8 3.1 3.0.1(3.0.1d9)9 3.1,带勘误表3 3.1.1(3.1.1)11              4.0                4.0.0 (4.0.0)14             4.1.0               4.1.0 (4.1.0)16              5.0                5.0.0 (5.0.0)18             5.1.0               5.1.0 (5.1.0)20             5.2.0               5.2.0 (5.2.0)22             6.0.0               6.0.0 (6.0.0)24             6.1.0               6.1.0 (6.1.0)26             6.2.0               6.2.0 (6.2.0)28             6.3.0               6.3.0 (6.3.0)30             7.0.0               7.0.0 (7.0.0)

*请参见下文长期合同具有UCA_版本22和24。

*非字符(例如U+FFFF)不会被忽略,并且可以被覆盖,因为UCA_版本22

*超出范围的代码点(大于U+10FFFF)不会被忽略,并且可以被覆盖,因为UCA_版本22

*完全可忽略的字符被忽略,并且不会中断与UCA_版本9和11。

*变量和一些行为改变后可忽略项的处理UCA_版本9

*被视为中日韩统一表意文字的字符(参见。覆盖CJK)取决于UCA_版本.

*许多韩国人被派往UCA_版本20,这将影响hangul_终端.

候补

--参见UTS#10第8版3.2.2替代权重

为了向后兼容,候补(旧名称)可以用作的别名变量.

向后的

--参见3.4后向重音,UTS#10。

向后=>$levelNumber或\@levelNumbers

重量按相反顺序排列;例如法语中的2级(变音符号排序)。如果省略(或$levelNumber($level编号)未定义\@级别编号[]),在所有级别进行转发。

进入

--见5裁剪;9.1 Allkeys文件格式,UTS#10。

如果排序规则元素表中通过桌子,将覆盖到排序规则元素的映射。如果不存在,则会另外定义映射。

entry=><<'entry',#用于DUCET v4.0.0(allkeys-4.0.0.txt)0063 0068 ; [0E6A.0020.0002.0063]#ch号0043 0068 ; [0E6A.0020.0007.0043]#Ch号0043 0048 ; [0E6A.0020.0008.0043]#CH(中国)006C 006C;[0F4C.0020.0002.006C]#ll号004C 006C;[0F4C.0020.0007.004C]#升004C 004C;[0F4C.0020.0008.004C]#LL号00F1;[0F7B.0020.0002.00F1]#n级006E 0303;[0F7B.0020.0002.000F1]#n-波浪线00D1;[0F7B.0020.0008.00D1]#N波浪线004E 0303;[0F7B.0020.0008.00D1]#N波浪线入口entry=><<'entry',#用于DUCET v4.0.0(allkeys-4.0.0.txt)00E6;[0E33.0020.0002.00E6][.0E8B.0020.0002.00 E6]#ae结扎为<a><e>00C6之间;[0E33.0020.0008.00C6][.0E8B.0020.0008.00C6]#AE结扎为<A><E>入口

注:UCA文件格式中的代码点(之前';')必须是Unicode代码点(定义为十六进制),但不是本机代码点。所以0063必须始终表示U+0063号机组,但不是的字符“\x63”.

权重可能因排序规则元素表而异。因此,确保中定义的重量进入将与通过加载的collation元素表中的一致桌子.

在DUCET v4.0.0中C0E60型和的D类0E6D型。因此设置主权重中国0E6安(作为介于0E60型0E6D型)使订购成为C<CH<D确切地说,DUCET已经有一些字符介于CD类:小额资本C(U+1D04型)带主要重量0E64年,c形钩/c形钩(U+0188/U+0187)带有0E65型、和c形卷曲(U+0255号机组)带有0E69年.然后是主要重量0电子6a对于中国制造中国订购人:c形卷曲D类.

hangul_终端

--见7.1.4拖尾重量,UTS#10。

如果给定一个真值(非零,但应为正数),则它将作为终止符主权重添加到每个标准朝鲜文音节的末尾。终止器的次要权重和任何更高权重都设置为零。如果值为false或hangul_终端键不存在,将不执行终止符权重的插入。

朝鲜文音节的边界是根据Jamo在Unicode标准韩国语音节类型.txt.

实施说明:(1) 对于扩展映射(映射到排序规则元素序列的Unicode字符),不会在排序规则元素之间添加终止符,即使那里存在朝鲜文音节边界。终止符的添加限制在最后一个排序规则元素的下一个位置。

(2) 不相连的朝鲜文字字母(兼容Jamo、半宽Jamo和括起来的字母)不会自动以终止符主权重终止。这些字符可能需要在排序规则元素表中预先包含终止符。

最高FFFF

--见5.14校对元素,UTS#35。

如果参数为true,U+FFFF(单位+FFFF)具有最高的主要重量。当布尔值为$coll->ge($str,“abc”)$coll->le($str,“abc\x{FFFF}”)是真的,预计美元str以开头“abc”或其他主要等效物。$str(美元)可能是“abcd”,“abc012”,但不应包括U+FFFF(单位+FFFF)例如“”abc\x“{FFFF}xyz".

$coll->le($str,“abc\x{FFFF}”)工作方式类似$coll->lt($str,“abd”)差不多,但后者有一个问题,你应该知道哪个字母在旁边c(c)。对于某种语言,其中中国作为下一个字母,“abch”大于“abc\x{FFFF}”,但小于“阿布德”.

注:这相当于(条目=>“FFFF;[.FFFE.0020.005.FFFF]”)。任何其他字符U+FFFF(单位+FFFF)可以通过以下方式定制进入.

完全相同的

--见A.3确定性比较,UTS#10。

默认情况下,权重相等的字符串应该相等,即使它们的代码点不相等。忽略完全可忽略的字符。

如果参数为true,则使用最终的断连级别。如果通过以下规定的所有水平进行比较后未发现重量差异水平,将与代码点进行比较。对于打破平局的比较,排序键附加了原始字符串的代码点。不能忽略完全可忽略的字符。

如果预处理和/或归一化如果应用,则使用字符串后面的代码点(默认情况下为NFD)。

ignoreChar(忽略字符)
ignoreName(签名)

--见3.6可变权重,UTS#10。

使表中的条目完全可忽略;也就是说,所有级别的权重都为零。

通过ignoreChar(忽略字符),任何字符匹配qr/$ignoreChar/将被忽略。通过ignoreName(签名),任何字符,其名称(在桌子文件作为注释)匹配qr/$ignoreName/将被忽略。

例如,当“a”和“E”可忽略时,“element”等于“lart”(或“lmnt”)。

忽略级别2

--参见5.1参数化裁剪,UTS#10。

默认情况下,区分大小写的比较(即级别3差异)不会忽略重音符号(即级别2差异)。

如果参数为true,则忽略重音符号(和其他可忽略的主要字符),即使考虑了大小写。

注释:水平应为3或更大。

平假名之前的片假名

--见7.2 UTS#10三级重量表。

默认情况下,平假名位于片假名之前。如果参数为true,则相反。

注释:此参数简单地假设任何平假名/片假名区分都必须出现在级别3中,并且它们在级别3的权重必须与7.3.1 UTS#10中提到的权重相同。如果定义了违反此要求的排序规则元素,则此参数无效。

水平

--见4.3表格排序键,UTS#10。

设置最大液位。任何高于指定级别的级别都将被忽略。

级别1:字母顺序第二级:音调顺序第3级:案例排序第4级:断线(例如,当变量“移位”时)例如,级别=>2,

如果省略,最大值为第四个。

注:DUCET包括第4级0xFFFF以上的重量。但该模块仅使用0xFFFF内的权重。什么时候?变量如果是“blanked”或“non-ignorable”(除了“shifted”和“shift-treed”),则级别4可能不可靠。

另请参见完全相同的.

长期合同

--见3.8.2 DUCET的井型,4.2生产阵列,UTS#10。

如果参数为true,那么对于包含三个或更多字符的压缩(这里昵称为“长压缩”),将处理初始子字符串。例如,即使没有缩写AB,也会检测到缩写ABC,其中a是起始字母,B和C是非起始字母(具有非零组合字符类的字符)。

违约:通常为假。如果UCA_版本为22或24,并且长期合同未在中指定new(),隐式设置了一个真值。这是通过Unicode 6.0.0和6.1.0一致性测试的一种变通方法。

更改()把手长期合同仅显式地。如果长期合同未在中指定更改()尽管如此UCA_版本已更改,长期合同不会更改。

限制:扫描非启动程序是单向的(无回溯)。如果找到AB,但没有找到ABC,则可能找不到第一个字符为A,第二个字符不是B的其他长缩写。

低于(规范化=>undef),将跳过不连续收缩的检测步骤。

注:步骤S2.1.1至S2.1.3中未考虑DUCET中的以下收缩,因为它们是不连续的。

0FB2 0F71 0F80(西藏VOWEL标志语音RR)0FB3 0F71 0F80(西藏VOWEL标志语音LL)

例如西藏VOWEL标志语音RR具有组合瓷砖覆盖层(U+0344号机组)是0FB2 0344 0F71 0F80在NFD中。在这种情况下0FB2 0F80型(藏语元音符号元音R)检测到,而不是0FB2 0F71 0F80.已插入0344制造0FB2 0F71 0F80不连续且缺乏收缩0FB2 0F71型禁止0FB2 0F71 0F80不会被检测到。

最小FFFE

--参见5.14排序元素,UTS#35。

如果该参数为真,U+FFFE公司具有最小的主要重量。两者的比较“$a1\x{FFFE}$a2”“$b1\x{FFFE}$b2”第一次比较1美元1美元在级别1,然后2美元b2美元1级,如下所示。

“ab\x{FFFE}一个"“”Ab\x“{FFFE}一个"“ab\x{自由现金流}c"“”Ab\x“{自由现金流}c"“ab\x{FFFE}xyz"“”abc\x“{FFFE}定义"“”abc\x“{法国队}xYz"“抄送\x{FFFE}xyz"“”abcX\x“{FFFE}定义"“”abcx\x“{FFFE}xyz"“”b\x“{自由现金流}aaa"“”bbb\x“{FFFE}一个"

注意:这相当于(条目=>“FFFE;[0.0001.0020.005.FFFE]”)。任何其他字符U+FFFE公司可以通过以下方式定制进入.

归一化

--见4.1标准化,UTS#10。

如果指定,则在准备排序键之前对字符串进行规范化(在预处理之后执行规范化)。

表单名称Unicode::Normalize::Normalize()接受将作为$normalization_form可接受的名称包括“NFD”,“NFC”,“NFKD”、和“NFKC”。请参阅Unicode::Normalize::Normalize()以获取详细信息。如果省略,“NFD”使用。

归一化在以下时间之后执行预处理(如有定义)。

此外,特殊值,未定义“未规范化”,可以使用,尽管它们与Unicode::Normalize::Normalize().

如果未定义(不是字符串“undef”(未定义))作为该键的值显式传递,则不执行任何规范化(如果不需要任何规范化,这可能会使裁剪更容易)。低于(规范化=>undef),只解决了连续收缩;例如,即使A型环(和A环珊瑚属)在之后订购Z轴,A-cedilla-ring公司将主要等于A类在这一点上,(规范化=>undef,预处理=>sub{NFD(shift)}) 不是相当于(归一化=>“NFD”).

(标准化=>“预标准化”),不执行任何标准化,但执行带有组合字符的不连续收缩。因此(规范化=>“预规范化”,预处理=>子{NFD(移位)}) 相当于(归一化=>“NFD”)。如果源字符串经过精细预规范化,(标准化=>“预标准化”)可以节省正常化的时间。

除了(规范化=>undef),Unicode::规范化是必需的(另请参见CAVEAT公司).

覆盖CJK

--参见7.1派生排序元素,UTS#10。

默认情况下,中日韩统一表意字符是按Unicode码位顺序排序的,但中日韩联合表意字符块中的字符数小于中日韩通用表意字符扩展A等中的字符。

在中日韩统一汉字块中:如果UCA_Version为8、9或11,则为U+4E00..U+9FA5。如果UCA_Version为14或16,则为U+4E00..U+9FBB。如果UCA_Version为18,则为U+4E00..U+9FC3。如果UCA_Version为20或22,则为U+4E00..U+9FCB。U+4E00..U+9FCC(如果UCA_Version为24或更高版本)。在中日韩统一汉字扩展块中:任何UCA_V版本中的分机A(U+3400..U+4DB5)和分机B(U+2000..U+2A6D6)。如果UCA_Version为20或更高版本,则分机C(U+2A700..U+2B734)。如果UCA_Version为22或更高版本,则分机D(U+2B740..U+2B81D)。

通过覆盖CJK,可以覆盖CJK统一表意文字(包括扩展)的排序。

例如,中日韩统一的表意文字,采用JIS码位顺序。

overrideCJK=>子{我的$u=班次;#获取Unicode代码点my$b=包装('n',$u);#至UTF-16BEmy$s=您的unicode转换器($b);#转换my$n=打开包装('n',$s);#将sji转换为short[$n,0x20,0x2,$u];#返回collation元素},

返回值可以是上面所示的第一到第四个权重的数组。返回值可以是一个整数,作为主要权重,如下所示。如果未定义返回时,将使用默认的派生排序规则元素。

overrideCJK=>子{我的$u=班次;#获取Unicode代码点my$b=包('n',$u);#至UTF-16BEmy$s=您的unicode转换器($b);#转换my$n=打开包装('n',$s);#将sji转换为short返回$n;#返回主重量},

返回值可以是包含零个或多个arrayref、整数或未定义.

例如,忽略所有中日韩统一的表意文字。

overrideCJK=>sub{()},#CODEREF返回空列表#其中->eq(“Pe\x{4E00}旋转“,”Perl“)为真#因为U+4E00是中日韩统一的表意文字,是可以忽略的。

如果值为假(包括未定义)通过,覆盖CJK没有效果。$Collator->更改(覆盖CJK=>0)重置旧的。

但是CJK统一表意文字的权重分配桌子进入仍然有效。如果未定义显式传递为该键的值,则CJK统一表意字符的权重被视为未定义。然而,当UCA_版本> 8,(overrideCJK=>undef)没有特殊含义。

注:除此之外,还有12个兼容CJK的象形文字(U+FA0E(U+FA0E),U+FA0F(U+FA0F),U+FA11型,U+FA13型,U+FA14型,U+FA1F型,U+FA21型,U+FA23型,U+FA24型,U+FA27型,U+FA28型,U+FA29型)也被视为中日韩统一的表意文字。但它们不能通过覆盖CJK当你使用DUCET时,因为表中包含了它们的重量。桌子进入优先于覆盖CJK.

覆盖朝鲜文

--参见7.1派生排序元素,UTS#10。

默认情况下,朝鲜文音节分解为朝鲜文Jamo,即使(规范化=>undef)但朝鲜文音节的映射可能会被覆盖。

此参数的工作原理如下覆盖CJK,请参阅此处的示例。

如果你想覆盖朝鲜文音节的映射,NFD和NFKD是不合适的,因为NFD和NFKD会在覆盖之前分解朝鲜文音节。FCD可以根据情况分解朝鲜文音节。

如果值为假(但不是未定义)通过,覆盖朝鲜文没有效果。$Collator->更改(覆盖朝鲜文=>0)重置旧的。

如果未定义作为该键的值显式传递,则朝鲜文音节的权重将被视为未定义,而不会分解为朝鲜文Jamo。但朝鲜文音节的重音定义桌子进入仍然有效。

覆盖输出

--参见7.1.1处理格式错误的代码单元序列,UTS#10。

Perl似乎允许超出范围的值(大于0x10FFFF)。默认情况下,超出范围的值替换为U+FFFD系统(替换字符)UCA_版本>=22,或忽略UCA_版本<= 20.

什么时候?UCA_版本>=22,则可以覆盖超出范围值的权重。虽然桌子进入可用于它们,超出范围的值太多。

overrideOut(覆盖)可以在算法上执行它。此参数的工作原理如下覆盖CJK,请参阅此处的示例。

例如,忽略所有超出范围的值。

overrideOut=>sub{()},#CODEREF返回空列表

如果值为假(包括未定义)通过,覆盖输出没有效果。$Collator->更改(overrideOut=>0)重置旧的。

关于U+FFFD的注释:

UCA建议,出于安全原因,不应忽略超出范围的值。说吧,“”类型\x“{110000}转"不应等于“perl”然而,U+FFFD系统被错误地映射到Unicode 6.0.0到6.2.0的DUCET中的变量排序规则元素,这意味着当变量不是不可忽视.

的映射U+FFFD系统在Unicode 6.3.0中进行了更正。看见http://www.unicode.org/reports/tr10/tr10-28.html#Trailing_Weights(7.1.4拖曳重量)。这样的修正由此重现。

overrideOut=>sub{0xFFFD},#CODEREF返回一个非常大的整数

由于Unicode 6.3.0,此解决方法是不必要的。

预处理

--见5.4预处理,UTS#10。

如果指定,coderef用于在形成排序键之前预处理每个字符串。

例如,删除英语文章,例如“a”或“the”。然后,“笔”在“铅笔”之前。

预处理=>子{my$str=移位;$str=~s/\b(?:an?|the)\s+//gi;return$str;返回$str;},

预处理在之前执行归一化(如有定义)。

例如,使用传统编码(如shift-jis)解码字符串:

$sjis_collator=Unicode::整理->新建(预处理=>\&your_shiftjis_to_unicode编码器,);@结果=$sjis_collator->排序(@shiftjis_strings);

注:从coderef返回的字符串将根据Perl的Unicode支持进行解释。请参见perlunicode码,秘鲁,新月形的,珍珠棉,utf8接口.

重新安排

--见3.5重新安排,UTS#10。

未按逻辑顺序编码并重新排列的字符。如果UCA_版本等于或小于11,默认值为:

重排=>[0x0E40..0x0E44,0x0EC0..0x0EC4],

如果要禁止任何重排,请传递未定义[](空列表的引用)作为此键的值。

如果UCA_版本等于或大于14,默认值为[](即无重新安排)。

根据UCA版本9,不应使用此参数;但目前尚未发出警告。

重写

如果指定,则使用coderef重写中的行桌子进入。coderef将获取每一行,然后应根据UCA文件格式返回一个重写的行。如果coderef返回空行,则将跳过该行。

例如,将任何主可忽略字符转换为第三可忽略字符:

重写=>子{my$line=班次;$line=~s/\[\.0000\..{4}\..{4]\./[.000.0000.000./g;return$line;返回$line;},

此示例显示了重写权重。重写允许影响代码点、权重和名称。

注释:桌子可以使用其他表文件;在每次读取未修改的表时,准备一次修改过的表比重写行效率更高。

抑制

--参见5.14.11特殊用途命令UTS#35(LDML)中的抑制缩写。

以指定字符开头的缩写被抑制,即使这些缩写是在桌子.

俄语和一些使用西里尔字母的语言的示例:

抑制=>[0x0400..0x0417,0x041A..0x0437,0x043A..0x045F],

其中0x0400代表U+0400号,CYRILLIC大写字母IE WITH GRAVE。

注释:通过签订合同进入未被抑制。

桌子

--请参阅3.8默认Unicode排序元素表UTS#10。

如果需要,可以使用其他排序规则元素表。

表文件应位于Unicode/逐份打印上的目录@INC公司。如果文件名为美食.txt,表文件搜索为Unicode/逐份打印/Foo.txt在里面@INC公司.

默认情况下,所有键.txt(作为DUCET的文件名)。如果要准备自己的表文件,请使用除所有键.txt最好避免名称空间冲突。

注释:使用XSUB时,DUCET是在构建此模块时编译的,可以节省运行时的时间。明确的说法(表=>'allkeys.txt'),或使用其他表,或使用ignoreChar(忽略字符),ignoreName(签名),undefChar码,undefName(未定义名称)重写将阻止此模块使用编译的DUCET。

如果不设防的作为该键的值显式传递,不读取任何文件(但可以通过定义排序规则元素进入).

定义不带任何表文件的排序规则元素表的典型方法:

$onlyABC=Unicode::排序->新建(table=>未定义,entry=><<“条目”,0061 ; [01011.0020.0002.0061]#拉丁文小写字母A0041 ; [0101.00020.0008.0041]#拉丁文大写字母A0062 ; [01020.0002.0062]#拉丁文小写字母B0042 ; [0102.0020.008.0042]#拉丁文大写字母B0063 ; [0103.0020.002.00063]#拉丁文小写字母C0043 ; [0103.0020.008.0043]#拉丁文大写字母C条目);

如果ignoreName(签名)undefName(未定义名称)则应将字符名指定为注释(如下#)在每条线上。

undefChar码
undefName(未定义名称)

--见6.3.4减少曲目,UTS#10。

取消定义排序规则元素,就像它在桌子。这会减小表格的大小。如果要排序的字符串中出现未分配的字符,排序键将从其代码点作为单字符排序元素生成,因为它大于任何其他分配的排序元素(按未分配字符中的代码点顺序)。但是,最好忽略您不熟悉并且可能从未使用过的字符。

通过undefChar码,任何字符匹配qr/$undefChar/将是未定义的。通过undefName(未定义名称),其名称(在桌子文件作为注释)匹配qr/$undefineName(qr/$undefineName)/将是未定义的。

例如,超过BMP字符的排序规则权重不存储在对象中:

undefChar=>qr/[^\0-\x{fffd}]/,
上排在下排之前

--见6.6案例比较,UTS#10。

默认情况下,小写在大写之前。如果参数为true,则相反。

注释:此参数简单地假设所有小写/大写区分必须出现在级别3中,并且它们在级别3的权重必须与7.3.1 UTS#10中提到的权重相同。如果定义的排序规则元素与此要求不同,则此参数无效。

变量

--见3.6可变权重,UTS#10。

此键允许可变排序规则元素的可变权重,这些元素在表中用ASTERISK标记(注意:许多标点符号和符号在allkeys.txt文件).

variable=>“blanked”、“non-ignorable”、“shifted”或“shift-trimmed”。

这些名称区分大小写。默认情况下(如果省略规范),采用“移位”。

“空白”变量元素在1到3级可忽略;在第四级考虑。“不可忽略”变量元素不会重置为可忽略。“移位”变量元素在1到3级可忽略他们的4级重量被旧的1级重量取代。非可变元素的4级权重为0xFFFF。“Shift-Trimmed”与“shifted”相同,但所有FFFF均为4级已修剪。

排序方法

@sorted=$Collator->排序(@not_sorted)

对字符串列表进行排序。

$result=$Collator->cmp($a,$b)

返回1(当美元大于十亿美元)或0(当美元等于十亿美元)或-1(当美元小于十亿美元).

$result=$Collator->eq($a,$b)
$result=$Collator->ne($a,$b)
$result=$Collator->lt($a,$b)
$result=$Collator->le($a,$b)
$result=$Collator->gt($a,$b)
$result=$Collator->ge($a,$b)

他们的工作方式与他们的操作员同名。

方程式:$a是否等于$b。ne:$a是否不等于$b。lt:$a是否小于$b。le:a美元是小于b美元还是等于b美元。gt:$a是否大于$b。ge:$a是否大于$b或等于$b。
$sortKey=$Collator->getSortKey($string)

--见4.3表格排序键,UTS#10。

返回排序键。

您可以使用二进制比较来比较排序键,并使用UCA获得字符串比较的结果。

$Collator->getSortKey($a)cmp$Collator->getSortKey($b)等于$Collator->cmp($a,$b)
$sortKeyForm=$Collator->viewSortKey($string)

将排序键转换为其表示形式。如果UCA_版本为8,输出略有不同。

使用Unicode::排序;my$c=Unicode::Collate->new();打印$c->viewSortKey(“Perl”),“\n”;#输出:#[0B67 0A65 0B7F 0B03 | 0020 0020 0020|0008 0002 0002 0002|FFFF FFFF#1级2级3级4级

搜索方法

这个比赛,gmatch公司,子集,gsubst公司方法的工作方式米//,米/克,秒///,秒/秒/克,但它们不知道任何模式,而只知道一个子字符串。

免责声明:如果预处理归一化参数为true$整理器,调用这些方法(指数,比赛,gmatch公司,子集,gsubst公司)由于位置和长度可能与指定字符串上的位置和长度不同,因此会发出嘶哑的声音。

重新安排hangul_terminator(hangul_terminator)忽略参数。平假名之前的片假名上排在下排之前不要影响匹配和搜索,因为大小无关紧要。

$position=$Collator->索引($string,$substring[,$position])
($position,$length)=$Collator->索引($string,$substring[,$position])

如果$子字符串匹配的一部分$string($string),返回标量上下文中匹配部分第一次出现的位置;在列表上下文中,返回匹配部分的位置和长度的两元素列表。

如果$子字符串与的任何部分都不匹配$string($string),返回-1标量上下文和列表上下文中的空列表。

例如,当$str(美元)“我很高兴ß研究人员Perl。",你说下面$子“M”ü不锈钢“,

my$Collator=Unicode::Collate->new(规范化=>undef,级别=>1);#(归一化=>未定义)是必需的。我的$match;if(my($pos,$len)=$Collator->索引($str,$sub)){$match=子项($str,$pos,$len);}

然后得到“亩ß"在里面$匹配,自“亩ß"主要等于“M”ü不锈钢“.

$match_ref=$Collator->匹配($string,$substring)
($match)=$Collator->匹配($string,$substring)

如果$子字符串匹配的一部分$string($string),在标量上下文中,返回提及匹配零件的第一次出现($match_ref如果匹配,则始终为true,因为每个引用都是真的); 在列表上下文中,返回匹配部分的第一次出现。

如果$子字符串与的任何部分都不匹配$string($string),返回未定义标量上下文和列表上下文中的空列表。

例如

if($match_ref=$Collator->match($str,$sub)){#标量上下文print“匹配[$$match_ref]。\n”;}其他{打印“不匹配。\n”;}if(($match)=$Collator->match($str,$sub)){#list-context打印“匹配[$match]。\n”;}其他{打印“不匹配。\n”;}
@match=$Collator->gmatch($string,$substring)

如果$子字符串匹配的一部分$string($string),返回所有匹配部分(或标量上下文中的匹配计数)。

如果$子字符串与的任何部分都不匹配$string($string),返回空列表。

$count=$Collator->subst($string、$substring、$replacement)

如果$子字符串匹配的一部分$string($string),匹配零件的第一次出现替换为$替换($string($string)修改)和$计数(始终等于1)返回。

$替换可以是代码(CODEREF),将匹配部分作为参数,并返回字符串以替换匹配部分(类似于s/(..)/$coderef->($1)/e).

$count=$Collator->gsubst($string、$substring、$replacement)

如果$子字符串匹配的一部分$string($string),匹配零件的所有引用都替换为$替换($string($string)修改)和$count个返回。

$替换可以是代码(CODEREF),将匹配部分作为参数,并返回字符串以替换匹配部分(类似于s/(..)/$coderef->($1)/eg).

例如

my$Collator=Unicode::Collate->new(规范化=>undef,级别=>1);#(规范化=>undef)是必需的。my$str=“骆驼驴斑马来了\x{301}升CAMEL马用摄像机\0e\0l。。。";$Collator->gsubst($str,“camel”,sub{“<b>$_[0]</b>”});#现在$str是“骆驼”驴斑马{301}升骆驼马。。。";#也就是说,所有的骆驼都是黑脸的。示例:levels和ignore_level2-camel匹配什么?---------------------------------------------------------------------------level ignore_level2|骆驼来了\x{301}升c-a-m-e-l凸轮\0e\0l-----------------------|---------------------------------------------------1个错误|是是是是是是是2个错误|是是否是3假|是否否是是4假|是否否是-----------------------|---------------------------------------------------1真|是是是是的是的是是的2正确|是是是是的是是的3正确|是否是是4正确|是否是否---------------------------------------------------------------------------注意:如果variable=>不可忽略,camel与c-a-m-e-l不匹配在任何级别。

其他方法

%old_tailoring=$Collator->更改(%new_tailoring)
$modified_collator=$collator->更改(%new_tailoring)

更改指定键的值并返回更改的部分。

$Collator=Unicode::Collate->new(级别=>4);$Collator->eq(“perl”,“perl”);#%旧=$Collator->更改(级别=>2);#返回(级别=>4)。$Collator->eq(“perl”,“perl”);#真的$Collator->更改(旧%);#返回(级别=>2)。$Collator->eq(“perl”,“perl”);#

不是所有的(键,值)允许更改。另请参见@Unicode::排序规则::ChangeOK@Unicode::排序::ChangeNG.

在标量上下文中,返回修改后的collator(但它是原始版本的克隆)。

$Collator->更改(级别=>2)->eq(“perl”,“perl”);#真的$Collator->eq(“perl”,“perl”);#真;现在最高水平是第二。$Collator->更改(级别=>4)->eq(“perl”,“perl”);#
$version=$Collator->版本()

返回Unicode标准的版本号(字符串)桌子collator对象使用的文件基于。如果表不包括版本行(以开头@版本),返回“未知”.

UCA_版本()

返回本模块参考的UTS#10的修订号,该修订号应与合并的DUCET相对应。

基本_尼古丁_版本()

返回此模块参考的UTS#10的版本号,该版本号应与合并的DUCET相对应。

出口

不会导出任何方法。

安装

虽然此模块可以在没有任何桌子文件,为了方便使用此模块,建议通过将其复制到目录<a place in@INC>/Unicode/Collate下,安装UCA格式的表文件。

最可取的是“默认Unicode排序元素表”(也称为DUCET),可从Unicode Consortium的网站获得:

http://www.unicode.org/Public/UCA/http://www.unicode.org/Public/UCA/latest/allkeys.txt(最新版本)

如果未安装DUCET,建议从以下位置复制文件http://www.unicode.org/Public/UCA/latest/allkeys.txt手动切换到<@INC>/Unicode/Collate/allkeys.txt中的位置。

CAVEATS(洞穴)

规范化

使用归一化参数需要Unicode::规范化模块(参见Unicode::规范化).

如果不需要(例如,在不需要处理任何组合字符的情况下),请指定(规范化=>undef)明确地。

--参见6.5避免规范化,UTS#10。

一致性测试

UCA的一致性测试可在http://www.unicode.org/Public/UCA/.

对于排序规则测试_SHIFTED.txt,一个collator通过Unicode::排序->new()应使用;对于排序规则测试_NON_IGNORABLE.txt,一个collator通过Unicode::排序规则->新(变量=>“不可忽略”,级别=>3).

如果UCA_版本26岁或更高完全相同的等级优先;Unicode::逐份->新建(相同=>1)Unicode::逐份->新建(相同=>1, 变量=>“不可忽略”,级别=>3)应该使用。

需要Unicode::Normalize才能尝试一致性测试。

作者、版权和许可

perl的Unicode::Collate模块是由SADAHIRO Tomoyuki编写的<SADAHIRO@cpan.org>. 本模块版权所有(C)2001-2014,SADAHIRO Tomoyuki。日本。保留所有权利。

这个模块是免费软件;您可以重新发布它和/或使用与Perl本身相同的条款对其进行修改。

文件Unicode/Collate/allkeys.txt是从http://www.unicode.org/Public/UCA/6.3.0/allkeys.txt。对于此文件,版权所有(c)2001-2012 Unicode,Inc.,根据使用条款在http://www.unicode.org/corpyright.html.

另请参阅

Unicode排序算法-UTS#10

http://www.unicode.org/reports/tr10/

默认Unicode排序元素表(DUCET)

http://www.unicode.org/Public/UCA/latest/allkeys.txt

UCA的一致性测试

http://www.unicode.org/Public/UCA/latest/CollationTest.html

http://www.unicode.org/Public/UCA/latest/CollationTest.zip

朝鲜文音节Type

http://www.unicode.org/Public/UNIDATA/HangulSyllableType.txt

Unicode规范化表单-UAX#15

http://www.unicode.org/reports/tr15/

Unicode区域设置数据标记语言(LDML)-UTS#35

http://www.unicode.org/reports/tr35/