完整編譯請參考本站
編譯boost的文章
如果只要編譯regex庫,有兩種方法(參考鏈結):
在boost根目錄下執行bjam--toolset=《編譯器名》--with-regex其它引數
到\libs egex\build裡,找到對應編譯器的makefile,然後make-f ***x.mak
boost.regex手裡有七種**和兩****寶
其中的七種**是:
regex_match 函式每種**都又有諸多變化(regex_search 函式
regex_replace 函式
regex_format 函式
regex_grep 函式
regex_split 函式
regex 類
每個函式都分別以c字串型別、std::string型別、迭代器型別作為引數過載
),不過後面四種**因年久失修已不建議使用.
兩****寶是:
regex_iterator 迭代器這兩****寶是整個boost.regex的靈魂,用熟它們以後那是「摘花飛葉即可傷人」啊~~regex_token_iterator 迭代器
#include先準備乙個測試用的資料備用,如果各位有雅興可以參考本站的另一篇文章《
google testing》使用google testing框架來做這個實驗,花一樣時間學兩樣啊~~
#include
#include
using
namespace
std;
intmain(
intargc,
char
* argv)
要確定一行字串是否與指定的正規表示式匹配,使用
regex_match。
下面這個**可以驗證szstr字串(定義在上面)是否與szreg匹配。
boost::regex的建構函式中還可以加入標記引數用於指定它的行為,如:
//指定使用perl語法(預設),忽略大小寫。
boost::regex reg1( szreg, boost::regex::perl|boost::regex::icase );
//指定使用posix擴充套件語法(其實也差不多)
boost::regex reg2( szreg, boost::regex::extended );
下面這個**不僅驗證是否匹配,而且可以從中提取出正規表示式括號對應的子串。
}//也可直接取指定位置資訊
if(mat[4].matched) cout <<
"path is"
<< mat[4] << endl;}
其中,boost::cmatch是乙個針對c字串的特化版本,它還有另三位兄弟,如下:
typedef match_resultscmatch;typedef match_resultssmatch;
typedef match_resultswcmatch;
typedef match_resultswsmatch;
可以把match_results看成是乙個
sub_match的容器,同時它還提供了
format方法來代替
regex_format函式。
乙個sub_match就是乙個子串,它從
std::pair繼承而來,這個
迭代器pair裡的
first和second分別指向了這個子串開始和結尾所在位置。同時,
sub_match又提供了
str(),length()方法來返回整個子串。
regex_match只驗證是否完全匹配,如果想從一大串字串裡找出匹配的一小段字串(
比如從網頁檔案裡找超連結
),這時就要使用
regex_search了。
下面這段**從szstr中找數字}
regex_replace提供了簡便的方法來部分替換源字串
正規表示式中,使用$1~$9(
或\1~\9)表示第幾個子串,$&表示整個串,$`表示第乙個串,$'表示最後未處理的串。
正規表示式中,使用(?1~?9新字串)表示把第幾個子串替換成新字串,其中是s1()代表乙個字串,s2的(?1)代表替換哪個字串,?0代表所有都要加上後面的字串?1代表第乙個替換成的字串
對應於c字串和c++字串以及寬字元,
regex_iterator同樣也有四個特化:
typedef regex_iteratorcregex_iterator;typedef regex_iteratorsregex_iterator;
typedef regex_iteratorwcregex_iterator;
typedef regex_iteratorwsregex_iterator;
這個迭代器的value_type定義是乙個
match_results。}
boost.regex也提供了
make_regex_iterator函式簡化
regex_iterator的構造,如上面的
itrbegin可以寫成:
itrbegin = make_regex_iterator(szstr,reg);
它同樣也有四個特化,形式和上面類似,就不再寫一遍騙篇幅了。
這個迭代器的
value_type定義是乙個
sub_match。}
boost.regex也提供了
make_regex_token_iterator函式簡化
regex_token_iterator的構造,最後的那個引數
-1表示以
reg為分隔標誌拆分字串,如果不是-1則表示取第幾個子串,並且可以使用陣列來表示同時要取幾個子串,例如:
;
// 第一子串和第二子串
boost::cregex_token_iterator itrbegin = make_regex_token_iterator(szstr,reg,subs); //使用-1引數時拆分,使用其它數字時表示取第幾個子串,可使用陣列取多個串
boost::cregex_token_iterator itrend;
for(boost::cregex_token_iterator itr=itrbegin; itr!=itrend; ++itr)}
#include
#include
using
namespace
std;
intmain(
intargc,
char
* argv)
}//也可直接取指定位置資訊
if(mat[4].matched) cout <<
"path is"
<< mat[4] << endl;}}
}};
// 第一子串和第二子串
boost::cregex_token_iterator itrbegin = make_regex_token_iterator(szstr,reg,subs); //使用-1引數時拆分,使用其它數字時表示取第幾個子串,可使用陣列取多個串
boost::cregex_token_iterator itrend;
for(boost::cregex_token_iterator itr=itrbegin; itr!=itrend; ++itr)
}cin.get();
return0;}
正規表示式之re
正規表示式 regular expression 用法 對字串進行模式匹配 1,對常量字串 普通字元 進行匹配 import res pyhton1c 22python1c 5pythonn2c 123 res re.findall python s 此處 python 就是常量字串 print r...
Python學習之正規表示式Re
前言 正規表示式是乙個特殊的字串行,它能幫助你方便的檢查乙個字串是否與某種模式匹配。re 模組使 python 語言擁有全部的正規表示式功能。簡單來說,re就是用來簡潔表達一組字串的表示式。2.re有一些主要的功能函式需要記憶 re.search pattern,string,flags 0 函式 ...
Boost學習之正規表示式 regex
如果只要編譯regex庫,有兩種方法 參考鏈結 在boost根目錄下執行bjam toolset 編譯器名 with regex其它引數 到 libs egex build裡,找到對應編譯器的makefile,然後make f x.mak boost.regex手裡有七種 和兩 寶 其中的七種 是 ...