bool validate_card_format(const std::string s)
{
static const boost::regex e("(\\d{4}[- ]){3}\\d{4}");
return regex_match(s, e);
}
- boost::regex的默認正則表達式語法是perl語法
boost::regex支持perl regular表達式、POSIX-Extended
regular表達式和POSIX-Basic
Regular表達式,但默認的表達式語法是perl語法,如果要使用其余兩種語法需要在構造表達式的時候明確指定。
例如,下面兩種方法效果相同
// e1 is a case sensitive Perl regular expression:
// since Perl is the default option there's no need to explicitly specify the syntax used here:
boost::regex e1(my_expression);
// e2 a case insensitive Perl regular expression:
boost::regex e2(my_expression, boost::regex::perl|boost::regex::icase);
perl正則表達式語法可參見《perl語言入門》第7、8、9章或boost的文檔。這里列出的語法是不全面的,而且部分說明可能并不清楚。
. 任意字符;使用match_no_dot_null標志時不匹配NULL字符; 使用match_not_dot_newline時不匹配換行字符
^ 匹配行的開始
$ 匹配行的結束
* 重復零次或則更多,例如a*b可匹配b,ab,aab,aaaaaaab
+ 重復一次以上,例如a+b可匹配ab,aab,aaaaaaaab。但不能匹配b了
? 零次或則一次,例如ca?b匹配cb,cab但不匹被caab
a{n} 匹配字符'a'重復n次
a{n,},字符a重復n次以上(含n次)
a{n,m} a重復n到m次(含)
*? 匹配前一個原子零次以上
+? 匹配前一個原子一次以上
?? 匹配前一個原子零次以上
{n,}? 匹配前一個原子n次以上(含)
{n,m? 匹配前一個原子n到m次(含)
| 或操作,例如ab(d|ef)匹配abd或則abef
[] 字符集操作,例如[abc]將匹配任何單個字符'a','b','c'
[a-d],表示a、b、c、d
^否操作,例如[^a-c]表示a至c之外的所有字符
- boost::regex對unicode編碼的支持
boost::regex使用ICU來實現對unicode及unicode變種的支持,這需要在編譯boost的時候指出是否使
用ICU以及ICU所在的目錄。否則編譯出來的boost::regex不支持unicode編碼。其中boost::wregex支持unicode編
碼的搜索,如果要搜索UTF-8、UTF-16、UFT-32編碼的字符串,則要用boost::u32regex。注意boost::wregex只能
支持unicode編碼,不能支持uft編碼。
如果要在搜索時忽略大小寫(即大小寫不敏感),則要用到表達式選項boost::regex::icase,例
如: boost::regex e2(my_expression,
boost::regex::perl|boost::regex::icase);