公告

<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

  • 随笔 - 9
  • 文章 - 13
  • 评论 - 3
  • 引用 - 0

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

boost::regex的用法---构建正则式

boost::regex

  • boost::regex的用法
      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正则表达式语法可参见《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);

      

posted on 2006-08-25 17:48 blues 阅读(1320) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理