集是可以匹配作为集成员的任意单个字符的一组字符。 集以“[”和“]”分隔,可以包含文本、字符范围、字符类、整理元素和等效类。 以“^”开头的集声明包含后跟的元素补充。
字符文本示例:
字符范围示例:
请注意,字符范围与区域设置具有很大的关系:它们将匹配在范围终点之间整理的任意字符,如果默认的“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。 根据区域设置,可能会包含一些其他字符。 |
|
任意可打印字符。 |
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,请在它的前面添加转义符。
版权所有 © 2012 CA。 保留所有权利。 | 就该主题发送电子邮件至 CA Technologies |