vc++2010裡正式對Regex進行支援,這無疑是vc++2010的一大亮點,給VS下c++開發人員帶來了許多方便。通過自己的使用,深感Regex的強大功能。所以總結一些簡單的介紹,並與大家共同分享。
一,什麼是Regex:
Regex(regular expression)就是用一個“字串”來描述一個特徵,然後去驗證另一個“字串”是否符合這個特徵。是用來檢驗和操作字串的強大工具。簡單的理解Regex可以認為是一種特殊的驗證字串。比如 運算式“ab+” 描述的特徵是“一個 'a' 和 任意個 'b' ”,那麼 'ab', 'abb', 'abbbbbbbbbb' 都符合這個特徵。
二,Regex可以用來做什麼。
Regex可以用來:
(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
按照我們的要求,字串被匹配挑出來了。這在處理大量規則的文字格式設定的時候很有用,因為它很靈活,一通百通。
看完例子,想畢大家已經對Regex有了一個感性的認識。那麼下面介紹Regex的一些基本文法,在Regex中擁有一套自己的文法規則,常見文法包括;字元匹配、重複匹配、字元定位、轉義匹配和其他進階文法(字元分組、字元替換和字元決策)等:
字元匹配文法:
| 字元文法 |
文法解釋 |
文法例子 |
| //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 |
匹配非Null 字元 |
‘//S//S//S’匹配A#4,不匹配3 d; |
| . |
匹配任一字元 |
‘....’匹配A$ 5,不匹配換行; |