通常在排序的上下文中引用排序规则元素。
在许多语言中,整理(像在字典中排序)不仅是按字符进行的。例如,在捷克,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
和之间的c
and 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
,实际上是两个不同的角色。它只是出于排序目的而被视为一个。您确定“图”是适用的术语吗?