linux c boost,Linux c++ boost库正则表达式用法

本文介绍了Boost库中的正则表达式支持的Perl、POSIX-Extended和POSIX-Basic三种语法,并详细解析了Perl正则表达式的各种特殊符号及用法。通过代码示例展示了如何在C++中使用Boost库进行正则匹配和提取子模式,包括全匹配、部分匹配以及提取子串的方法。
摘要由CSDN通过智能技术生成

boost::regex支持perl regular表达式、POSIX-Extended regular表达式和POSIX-Basic Regular表达式,但默认的表达式语法是perl语法,如果要使用其余两种语法需要在构造表达式的时候明确指定。

perl正则表达式语法简介如下:

. 任意字符;使用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库实现正则表达式代码示例如下,

代码示例1:#include

#include

#include

#include

using namespace std;

int main(int argc, char** argv)

{

boost::regex re("(\w+):(\d+)");

//full match

string txt1 = "ruby:123";

string txt2 = "ruby:123s";

assert(true == boost::regex_match(txt1, re));

assert(false == boost::regex_match(txt2, re));

//partial match

assert(true == boost::regex_search(txt2, re));

//extract sub-pattern

boost::match_results<:const_iterator> what;

if (regex_match(txt1, what, re, boost::match_default))

{

assert("ruby" == what[1]);

assert("123" == what[2]);

}

return 0;

}

代码示例2:#include "stdafx.h"

#include

#include

#include

#include

#include

using namespace std;

using namespace boost;

regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");

int main(int argc, char* argv[])

{

std::string in;

cmatch what;

cout << "enter test string" << endl;

getline(cin,in);

if(regex_match(in.c_str(), what, expression))

{

for(int i=0;i

cout<

}

else

{

cout<

}

return 0;

}

运行结果:

输入:select name from tablestr:select name from table

str:name

str:table

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值