Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146071
  • 博文数量: 40
  • 博客积分: 1131
  • 博客等级: 少尉
  • 技术积分: 459
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-16 11:50
文章分类
文章存档

2012年(2)

2011年(38)

我的朋友

分类: 嵌入式

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}”);(聪明)

1, 主要的模板类和几个函数

模板类:basic_regex

namespace boost{
  templete , class Allocator = std::alloccator> class basic_regex;
  typedef basic_regex regex;
  typedef basic_regex wregex;
}

函数: 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) {
    …
  }
}

阅读(2243) | 评论(0) | 转发(1) |
0

上一篇:泛型技术和Boost库

下一篇:putty + winscp

给主人留下些什么吧!~~