上一主题: 备选项

下一主题: 行锚点

集是可以匹配作为集成员的任意单个字符的一组字符。 集以“[”和“]”分隔,可以包含文本、字符范围、字符类、整理元素和等效类。 以“^”开头的集声明包含后跟的元素补充。

字符文本示例:

字符范围示例:

请注意,字符范围与区域设置具有很大的关系:它们将匹配在范围终点之间整理的任意字符,如果默认的“C”区域设置有效,则范围只会根据 ASCII 规则发生作用。 例如,如果库是使用 Win32 本地化模型编译的,则 [a-z] 将匹配 ASCII 字符 a-z,以及“A”、“B”等,但不匹配紧接在“z”后面整理的“Z”。 在编译时,可以通过指定 regbase::nocollate 来显示这种特定于区域设置的行为,这是使用 regbase::normal 时的默认行为,并且会强制范围根据 ASCII 字符代码进行整理。 同样,如果使用 POSIX C API 函数,则设置 REG_NOCOLLATE 会关闭区域设置相关的整理。

可以在集声明中使用语法 "[:classname:]" 来表示字符类,例如,"[[:space:]]" 是所有空格字符的集。 仅当设置了标志 regbase::char_classes 时,才可以使用字符类。 可用的字符类包括:

alnum

任意字母数字字符。

alpha

任意字母字符,即 a-z 和 A-Z。 根据区域设置,可能会包含一些其他字符。

blank

任意空白字符,即空格或制表符。

cntrl

任意控制字符。

digit

任意数字,即 0-9。

graph

任意图形字符。

lower

任意小写字母字符,即 a-z。 根据区域设置,可能会包含一些其他字符。

print

任意可打印字符。

punct

任意标点符号字符。

space

任意空格字符。

upper

任意大写字母字符,即 A-Z。 根据区域设置,可能会包含一些其他字符。

xdigit

任意十六进制数字字符,即 0-9、a - f 和 A-F。

word

任意单词字符 - 所有字母数字字符以及下划线。

unicode

其代码大于 255 的任意字符,这只适用于宽字符特征类。

可以使用一些快捷方式来代替字符类,如果设置了标志 regbase::escape_in_lists,则您可以使用:

整理元素采用集声明中的常规格式 [.tagname.],其中,tagname 是单个字符或整理元素的名称,例如 [[.a.]] 等效于 [a],[[.comma.]] 等效于 [,]。 库支持所有标准的 POSIX 整理元素名称,此外还支持以下连字:“ae”、“ch”、“ll”、“ss”、“nj”、“dz”和“lj”,每个连字具有小写、大写和标题大小写的变体。 多字符整理元素可能会导致集与多个字符匹配,例如,[[.ae.]] 将匹配两个字符,但请注意,[^[.ae.]] 仅匹配一个字符。

等效类采用集声明中的常规格式 [=tagname=],其中,tagname 是单个字符或整理元素的名称,并匹配作为与整理元素 [.tagname.] 相同的主要等效类的成员的任意字符。 等效类是整理相同内容的一组字符,主要等效类是其主要排序键全部相同的一组字符(例如,字符串通常依次按字符、强调部分和大小写整理;主要排序键与字符相关,第二排序键与强调部分相关,第三排序键与大小写相关)。 如果没有与 tagname 对应的等效类,则 [=tagname=] 与 [.tagname.] 完全相同。 遗憾的是,除了在 Win32 中以外,没有一种与区域设置无关的方法可用于获取字符的主要排序键。 对于其他操作系统,库将会根据完全排序键(从 strxfrm 获取)“猜测”主要排序键,因此,在除 Win32 以外的任何其他操作系统下,很有可能会将等效类视为已损坏。

要在集声明中包括文本“-”请执行以下操作:使该文本成为开头的“[”或“[^”后面的第一个字符、某个范围的终点或某个整理元素;如果设置了标志 regbase::escape_in_lists,请在它的前面添加转义符,例如“[\-]”。 要在集中包括文本“[”、“]”或“^”,请使该文本成为某个范围的终点或某个整理元素;如果设置了标志 regbase::escape_in_lists,请在它的前面添加转义符。