vc++2010里正式对正则表达式进行支持,这无疑是vc++2010的一大亮点,给VS下c++开发者带来了许多方便。通过自己的使用,深感正则表达式的强大功能。所以总结一些简单的介绍,并与大家共同分享。
一,什么是正则表达式:
正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。是用来检验和操作字符串的强大工具。简单的理解正则表达式可以认为是一种特殊的验证字符串。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。
二,正则表达式可以用来做什么?
正则表达式可以用来:
(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
(3)用来替换,比普通的替换更强大。
三,简介及基本语法:
先看网上一个经典的例子:
#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
按照我们的要求,字符串被匹配挑出来了。这在处理大量规则的文本格式的时候很有用,因为它很灵活,一通百通。
看完例子,想毕大家已经对正则表达式有了一个感性的认识。那么下面介绍正则表达式的一些基本语法,在正则表达式中拥有一套自己的语法规则,常见语法包括;字符匹配、重复匹配、字符定位、转义匹配和其他高级语法(字符分组、字符替换和字符决策)等:
字符匹配语法:
字符语法 | 语法解释 | 语法例子 |
//d | 匹配数字(0~9) | ‘//d’匹配8,不匹配12; |
//D | 匹配非数字 | ‘//D’匹配c,不匹配3; |
//w | 匹配任意单字符 | ‘//w//w’ 匹配A3,不匹配@3; |
//W | 匹配非单字符 | ‘//W’匹配@,不匹配c; |
//s | 匹配空白字符 | ‘//d//s//d’匹配3 d,不匹配abc; |
//S | 匹配非空字符 | ‘//S//S//S’匹配A#4,不匹配3 d; |
. | 匹配任意字符 | ‘....’匹配A$ 5,不匹配换行; |