一个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}”);(聪明) 1, 主要的模板类和几个函数 模板类:basic_regex namespace boost{ templete <class charT, class traits = regex_traits<cahrT>, class Allocator = std::alloccator<charT>> class basic_regex; typedef basic_regex<char> regex; typedef basic_regex<wchar> wregex; } 函数: regex_match, regex_search, regex_replace 2, 实例分析 #a, 验证email地址 分析:构建正则表达式先,"[\\w\\d]+@[\\w\\d]+(\\.[\\w\\d]+)+” 代码: #include <boost/regex.hpp> int main() { static const boost::regex re_mail("[\\w\\d]+@[\\w\\d]+(\\.[\\w\\d]+)+”); if (boost::regex_match(input_string, re_mail) { … } } |