初学C++正则表达式(regex)
由效果產(chǎn)生學(xué)習(xí)的興趣,即使失敗,但至少不會中途作廢。
正則表達(dá)式,語法看起來很多啊! 本文做一個簡單的學(xué)習(xí)介紹:(環(huán)境:Windows 7 + Visual Studio 2010)
#include <regex>? //header
1,匹配電話號碼
string tel_pattern("13([5-8])(\\d{8})");
//解釋:()表示一個子表達(dá)式,a,13是開頭;b,[5-8]表示這個字符介于'5'和'8'之間;c,\\轉(zhuǎn)義,因為此處d有特殊含義 d{8}表示8個數(shù)字。結(jié)果:數(shù)字個數(shù)為11個,以135-138為開頭。
string tel = "13512345678"; www.2cto.com
bool match = regex_match(tel,tel_pattern);
2,匹配郵件地址
string email_pattern("(\\w+)(\\.|_)?(\\w+)@(\\w+)(\\.(\\w+))+");
//解釋:w+表示一個或多個單詞,.|_表示.或者_(dá),?表示有0個或者1個,+表示重復(fù)。
@前面的含義是,單詞串,串之間可以有1個.或者_(dá),也可以沒有
@后面的含義是,單詞串開始,后面有一個 .words或者多個
3,分隔字符串
[cpp]?
<span style="font-size:14px;">? regex str_pattern("(\\.)");?
??? string str = "www.baidu.com";?
??? sregex_token_iterator iter(str.begin(),str.end(),str_pattern,-1);?
??? sregex_token_iterator end;?
??? vector<string> vec;?
??? while(iter != end)?
??? {?
??????? vec.push_back(*iter++);?
??????? printf_s("%s \n",vec.back().c_str());?
??? }?
??? printf_s("%d \n",vec.size());</span>?
總結(jié):正則表達(dá)式用法很強(qiáng)大,可以完成查找、匹配、分隔操作。
重要一點:正則表達(dá)式 與 編譯原理中的語法樹、詞法分析聯(lián)系太緊了,相互之間補充理解。
總結(jié)
以上是生活随笔為你收集整理的初学C++正则表达式(regex)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux Shell History
- 下一篇: C++正则表达式的使用