通常在排序的上下文中引用排序规则元素。
在许多语言中,整理(像在字典中排序)不仅是按字符进行的。例如,在捷克,ch不排序之间cg,并ci像它会英文的,但被认为是作为一个整体进行排序。它是一个排序元素(在这里我们不能指代字符,字符是排序元素的子集),在h和之间进行排序i。
现在您可能会问,与正则表达式有什么关系?,为什么要在方括号表达式中引用整理元素?。
好吧,在方括号内,确实使用了顺序。例如,在中[c-j],您希望字符介于c和之间j。那你呢?您宁愿在此整理元素。[h-i]在捷克的比赛中ch:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
因此,如果您能够在方括号表达式中列出一系列排序规则元素,那么您也希望能够单独列出它们。[a-cch]会匹配介于a和c和之间的cand h字符。要具有a-c和ch整理元素,我们需要一种新的语法:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(介于a和之间c的ch一个)。
现在,世界还不是很完美,也许永远不会如此。上面的示例在GNU系统上并且可以正常工作。一个的另一示例排序元素可以是e与UTF-8组合重音符($'e\u0301'呈现像$'\u00e9'如é)。
é和é是相同的字符,除了一个用一个字符表示而另一个用两个字符表示。
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
可以在某些系统上正常工作,但不能在其他系统上工作(例如,不是GNU的)。而且,目前还不清楚是否$'[[.\ue9.]]'应该只匹配$'\ue9'或两者$'\ue9'并$'e\u301'。
更不用说非字母脚本,或具有不同区域排序顺序的脚本,例如ffi(ffi一个字符)之类的东西,用这种简单的API很难处理。
ch,实际上是两个不同的角色。它只是出于排序目的而被视为一个。您确定“图”是适用的术语吗?