分类: 嵌入式
2011-08-02 17:14:50
一个C++中最出色的正则表达式库,可以媲美perl。
正则表达式1, 字符
除了”.*+?|^$\(){}[]”以外的字符都是正则表达式中的字符。
2,通配符
“.”用来匹配任意一个字符。
3, 重复规则
“*”可以将前一个字符重复0~任意次
“+”可以将前一个字符重复1~任意次
“?”可以将前一个字符重复0~1次
“{}”可以将前一个字符重复指定次数,如,a{2,},代表a重复2~任意次。
4, 其他规则
“|”代表选择符,如a(bc|de)可以匹配abc或者ade.
“[]”集合符号,如[abc]可以匹配a,或者b,或者c
“^”补集符号,如[^abc],匹配除了abc的其它任意一个字符
如果设定了regex_constants::char_classes标志,那么可以通过[:class:]来快捷应用。如,
[:digit:], 匹配任意一个数字
[:word:], 匹配任意一个英文字母(包括下划线)
[:blank:], 匹配任意一个空白字符(sapce & tab)
还可以用快捷的转义序列来简化,"\d", “\w”, "\s”. 但是在c++中,由于"\”是转义字符,所以必须用"\\d”来表示"\d”。
Boost.Regex
使用正则表达式库,最基本也是最重要的是,构造正确的表达式模式。
比如构造一个16位信用卡号(xxxx xxxx xxxx xxxx);
boost::regex credit_card(“\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}”);
boost::regex credit_card(“\\d{4}([\\s-]?\\d{4}){3}”);(聪明)
模板类:basic_regex
namespace boost{
templete
typedef basic_regex
typedef basic_regex
}
函数: regex_match, regex_search, regex_replace
2, 实例分析#a, 验证email地址
分析:构建正则表达式先,"[\\w\\d]+@[\\w\\d]+(\\.[\\w\\d]+)+”
代码:
#include
int main() {
static const boost::regex re_mail("[\\w\\d]+@[\\w\\d]+(\\.[\\w\\d]+)+”);
if (boost::regex_match(input_string, re_mail) {
…
}
}