免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1191 | 回复: 0
打印 上一主题 下一主题

正则表达式 - Boost.Regex [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:51 |只看该作者 |倒序浏览

一个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) {
    …
  }
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP