/A匹配缓冲区的起始点;
/Z匹配缓冲区的结束点;关于它们的使用,详细参见代码。
/d表示数字,/d{3}表示一个三位数的数字,{}表示约束运算符(bound operator),表示要重复3次;和//d//d//d的效果一样;
重复符+:表示前面的表达式可以重复,但是必须至少重复一次;比如:[a-zA-Z]+,就表示一个单词了——可以有任意多个大小写字母不断重复组成,不就是单词么!
/w:表示单词;这比上面的方式更加简单!这个缩写可以匹配所有的单词字符,不仅仅是ascii的单词字符,因此更适合国际化环境。
一个圆点(.):表示一个任意字符;
可选择的匹配:意味着从两个或者多个子表达式中选择一个匹配的子表达式,每个选择之间用竖线符号(|)进行分隔。比如:
regex reg("(//d{2}|N/A)"),表示2个数字,或者字符串“N/A”。值得注意的是:这个表达式用圆括号括起来,目的是为了确保可以将整个表达式看做两个可选项。
/s,表示一个空格;
后向引用(back reference操作):即在后面的表达式中,对前面的子表达式进行引用。可以用索引号来进行,比如下面的例子:
regex reg("(([a-zA-Z]+))//s//1");
就是表示:一个单词,然后加一个空格,然后再是这个单词。第一个括号里面的部分([a-zA-Z]+),为子表达式。(最后的//1,注意,是索引“一”,而不是字母“L”的小写哦!)
kleene星号(*),它表示前面的表达式可以被匹配零次或者多次。
问号(?),它可以被用于声明非贪婪的重复(关于这方面的讨论,参见Regex代码),但是就它自身而言,它表示表达式必须出现零次或者一次。
元字符(^),表示取反的字符类。我们可以用它来表示一个匹配任意不在给定字符类中的字符,即所列出的字符类的补集,参见代码。
关于约束重复记号,用法非常灵活,比如:
regex reg("//d{5}"); //严格匹配5个数字 regex reg("//d{2,4}"); //匹配2个、3个或者4个数字 regex reg("//d{2,}"); //匹配2个或者更多数字,没有上限
需要注意的是,在编程时,需要在转义字符之前再加一个转义字符(/),并以一个非字母字符结束该序列。也就是说,虽然我们/d就表示一个数字,但是在写的时候,应该写作
regex reg("//d");