您正在从Perl 5.39.5查看此文档的版本。这是Perl的开发版本。

目录

名称

Unicode::Collate-Unicode排序算法

简介

使用Unicode::排序;#构造$Collator=Unicode::整理->新(%裁剪);#排序@排序=$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=>\&重写,suppress=>\@charList,table=>$filename,undefiName=>qr/$undefiName/,undefChar=>qr/$undefChar/,upper_before_lower=>$bool,variable=>$variable,);
UCA_版本

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

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

UCA Unicode标准DUCET(@版本)-------------------------------------------------------8 3.1 3.0.1(3.0.1d9)9 3.1及勘误表3 3.1.111             4.0.014             4.1.016             5.0.018             5.1.020             5.2.022             6.0.024             6.1.026             6.2.028             6.3.030             7.0.032             8.0.034             9.0.036            10.0.038            11.0.040            12.0.041            12.1.043            13.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

重量顺序相反;例如,法语中的第二级(发音顺序)。如果省略(或$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]#ch0043 0068 ; [0E6A.0020.0007.0043]#通道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.000F1]#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.0C6]#AE结扎为<A><E>入口

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

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

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

hangul_终端

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

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

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

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

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

最高FFFF

--参见2.4定制的非字符权重,UTS#35(LDML)第5部分:排序。

如果参数为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(忽略字符)
忽略名称

--见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内的权重。什么时候?变量为“空白”或“不可忽略”(除了“移位”和“移位边缘”),则级别4可能不可靠。

另请参见完全相同的.

长期合同

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

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

违约:通常为假。如果UCA_版本为22或24,并且长期合同未在中指定新建(),则隐式设置true值。这是通过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型(西藏VOWEL标志语音R)检测到,而不是0FB2 0F71 0F80.已插入0344制造0FB2 0F71 0F80不连续且缺乏收缩0FB2 0F71型禁止0平方英尺2 0平方英尺71 0平方英尺80不会被检测到。

最小FFFE

--见1.1.1 U+FFFE,UTS#35(LDML)第5部分:校对。

如果参数为true,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;[.0001.0020.0005.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。如果UCA_Version为24至30,则为U+4E00..U+9FCC。如果UCA_Version为32或34,则为U+4E00..U+9FD5。如果UCA_Version为36,则为U+4E00..U+9FEA。如果UCA_Version为38、40或41,则为U+4E00..U+9FEF。如果UCA_Version为43,则为U+4E00..U+9FFC。在中日韩统一汉字扩展块中:如果UCA_Version为8到41,则分机A(U+3400..U+4DB5)。如果UCA_Version为43,则分机A(U+3400..U+4DBF)。如果UCA_Version为8到41,分机B(U+2000..U+2A6D6)。如果UCA_Version为43,则分机B(U+2000..U+2A6DD)。如果UCA_Version为20或更高版本,则扩展C(U+2A700..U+2B734)。如果UCA_Version为22或更高版本,则分机D(U+2B740..U+2B81D)。如果UCA_Version为32或更高版本,则扩展E(U+2B820.U+2CEA1)。如果UCA_Version为36或更高版本,则分机F(U+2CEB0..U+2EBE0)。如果UCA_Version为43,分机G(U+3000..U+3134A)。

通过超越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统一表意字符的权重被视为未定义。然而,当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,则可以覆盖超出范围值的权重。虽然桌子进入可用于它们,超出范围的值太多。

覆盖输出可以在算法上执行它。此参数的工作原理如下覆盖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;返回$str;},

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

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

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

注:从coderef返回的字符串将根据Perl的Unicode支持进行解释。请参见过月球酰胺,珍珠岩,新月形的,珍珠棉,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;},

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

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

抑制

--见3.12特殊用途命令,UTS#35(LDML)第5部分:排序。

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

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

抑制=>[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 ; [0102.0020.002.0002.0062]#拉丁文小写字母B0042 ; [0102.0020.008.00042]#拉丁文大写字母B0063 ; [0103.0020.002.00063]#拉丁文小写字母C0043 ; [0103.0020.008.0043]#拉丁文大写字母C条目);

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

undefChar码
undefName(未定义名称)

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

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

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

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

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

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

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

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

变量

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

此键允许可变排序规则元素的可变权重,这些元素在表中用ASTERISK标记(注意:许多标点符号和符号在所有键.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);#(规范化=>undef)是必需的。我的$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)修改)和$count个(总是等于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::排序::更改确定@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才能尝试一致性测试。

EBCDIC-SUPPORT是实验性的。

作者、版权和许可

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

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

文件Unicode/Collate/allkeys.txt是从http://www.unicode.org/Public/UCA/13.0.0/allkeys.txt。本文件版权所有(c)2020 Unicode,Inc。;根据使用条款在http://www.unicode.org/terms_of_use.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

朝鲜文音节类型

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/