C++11 嘴砲:Regular Expression 正規表示式

文章推薦指數: 80 %
投票人數:10人

匹配你要的字串(regex_search, regex_match). 看個例子我相信大家就會懂了:. regex_search_match.cpp. #include  ... About April26,2016|PostedbyTommyJSWu C++11嘴砲:RegularExpression正規表示式 C++11對於長年埋藏在國內大專體系計算機程式課程血液中的C++03算是新增了許多令人耳目一新的功能,許多改動我認為是讓程式碼本身具有了語義(如std::move,std::forward,,有些改動是讓程式碼變得較簡潔易讀(例如auto),而有一大部份是功能性函式庫的加強,這篇要喇的regex就是其中之一。

這也是本系列第一篇,希望之後能繼續寫下去lol 預備知識 本篇假設大家都知道regularexpression都是幹啥用的了。

並且我假設大家都知道要compile有大部份完備C++11語法的code需要gcc4.8(clang要幾版我忘了ㄏㄏ),然後參數要下-std=c++11。

當然如果你裝的是gcc6那預設就是-std=c++14皆大歡喜。

時代在進步,不要執著於gcc4.6這種可怕的版本了(後面會講這版可怕在哪?)。

regex的表示方式 要做事情需要引入標頭檔,在這邊要用的叫做#include

和大多數STL一樣,regex是在std這個namespace底下。

然後就是宣告一個regex物件出來了。

十分簡單,就長得像下面這樣 regex_declare.cpp #include intmain() { std::regexreg1("\\s\\w+"); std::regexreg2("[0-9]{3}\\w+",std::regex_constants::icase); } 不汙辱大家的智商,第一個參數的重點只在escaping的部份。

要表示regexp中的\d\S這些東西需要兩個反斜線。

Ctor放的第二個參數代表這個regexp的設定(http://en.cppreference.com/w/cpp/regex/syntax_option_type)。

例如,我這邊打的std::regex_constants::icase代表不分大小寫的匹配。

匹配你要的字串(regex_search,regex_match) 看個例子我相信大家就會懂了: regex_search_match.cpp #include #include #include intmain() { std::stringarticle[]={ "T12346898+9=17!!", "9.2i55sT515xxyzXI998", "APTX4869", "C8763" }; std::regexreg("[A-Z]\\d+"); std::smatchm; std::ssub_matchsm; for(auto&line:article){ if(regex_search(line,m,reg)){ std::cout< #include #include #include intmain() { std::stringarticle[]={ "8+9=17!!1+2=3", "48*9=432", }; std::regexreg("(\\d+)[+\\-*/](\\d+)=(\\d+)"); std::smatchm; std::ssub_matchsm; for(auto&line:article){ if(regex_search(line,m,reg)){ std::cout< #include #include #include intmain() { std::stringarticle[]={ "8+9=17!!1+2=3!!!444+5=9999", "48*9=432QAQobov876+00=35", }; std::regexreg("(\\d+)[+\\-*/](\\d+)=(\\d+)"); std::smatchm; std::ssub_matchsm; for(autoline:article){ while(regex_search(line,m,reg)){ std::cout< #include #include intmain() { std::stringarticle[]={ "[email protected]@[email protected]", "[email protected]@cs.com" }; std::regexemail_reg("([\\w\\d]+)@(\\S+)"); for(auto&line:article){ autoresult_start=std::sregex_iterator(line.begin(),line.end(),email_reg); autoresult_end=std::sregex_iterator(); for(autoit=result_start;it!=result_end;++it){ std::smatchmatch=*it; std::cout< #include #include intmain() { std::stringtext="hihi2x=3;//commenta=15;b=-5;y=9988"; std::regexre("(\\w+)=([\\-\\d]+)"); autostart=std::sregex_token_iterator(text.begin(),text.end(),re,-1); autoend=std::sregex_token_iterator(); std::cout< #include #include intmain() { std::stringarticle("Resourcesexquisitesetarrangingmoonlightsemhimhouseholdhad.Monthshadtoohamcousinremovefarspirit.Sheprocuringthewhyperformedcontinualimproving."); std::regexreg_3w("\\b\\w{3}\\b"); std::cout<



請為這篇文章評分?