没有合适的资源?快使用搜索试试~ 我知道了~
Boost作为C++业内默认的“准”标准库,正如当年的STL一样,发挥着越来越重要的作用,所以好好学一下十分有必要,特此分享一下
资源推荐
资源详情
资源评论
C++ boost 正则表达式用法
什么是正则表达式?正则表达式是一种用来描述一定数量文本的模式。Regex 代表
Regular Express。
如果您不知道什么是正则表达式,请看这篇文章
http://blog.csdn.net/begtostudy/archive/2007/11/11/1879206.aspx
有了正则表达式的基础,问题是如何使用。我们以 boost::regex 来说
先看一个网上经典的例子。
#include "stdafx.h"
#include <cstdlib>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
#include <iostream>
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<what.size();i++)
cout<<"str :"<<what[i].str()<<endl;
}
else
{
cout<<"Error Input"<<endl;
}
return 0;
}
==============
结果
输入:select name from table
输出:str:select name from table
str:name
str:table
按照我们的要求,字符串被匹配挑出来了。
这在处理大量规则的文本格式的时候很有用,因为它很灵活,一通百通。
首先,即使你拥有了 boost 库,也需要单独编译 regex。
如果你不知道 boost 库,看这里
http://www.stlchina.org/twiki/bin/view.pl/Main/BoostStartIntroduce
网上的介绍:
boost 库安装比较麻烦,需要自己编译源文件,我整理了一下,如果仅仅需要做正则表达
式,按下面的代码敲就行了:
cmd
vcvars32.bat
cd D:\boost_1_32_0\libs\regex\build
d:
nmake -fvc6.mak
nmake -fvc6.mak install
注 意,别看下载下来的数据包没有多大,解压缩之后达到了 100 多 M,编译完之后为
109M,占用 131M,所以安装时一定注意空出足够的空间,敲入 nmake -fvc6.mak 后等待的
时间比较长,屏幕上还会出现一大堆英语,可以不做考虑。按照步骤往下敲就行了。压缩
包内文档很详细,参照文档继续就可以了。
在 VC6 中集成:Tools->Options->Directories->Include files
加入:D:\boost_1_32_0
我用的是 VS2003
做了 run.bat
chdir E:\Program\boost_1_34_1
bjam "-sTOOLS=vc-7_1" "-sVC71_ROOT=D:\Program Files\Microsoft Visual Studio .NET
2003\Vc7" "--prefix=E:\Program\boost" "--builddir=E:\Program\boost_1_34_1\build"
"-sBUILD=debug release <runtime-link>static/dynamic" --with-regex install
PAUSE
至于参数,需要参考 boost 安装介绍
http://blog.csdn.net/begtostudy/archive/2007/11/11/1879213.aspx
其他的一些介绍
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 次(含)
*? 匹配前一个原子零次以上
剩余11页未读,继续阅读
资源评论
昵称容我再想想
- 粉丝: 8
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功