c++11正則表示式(一)——匹配模式(pattern)
一、作用
pattern 是一個c++字串,它作用是給出一匹配規則,去檢測給定字串是否具備這種拼接規則。
二、模式字串的語法規則
需要插入一句題外話,在特殊元字元中會用到\,對於c/c++而言它是個特殊字元,若我們需要一個“斜槓"時候需要
在其前面加一個\,即應該寫為\\。
1>開始與結尾位置宣告
1.1 ^表示字串的開始
如 "^yao",表示以“yao”開始的的字串。
“yaopanyuan”,“yaois”是符合模式的字串。
1.2^$表示字串的結尾
“yao$”表示以“yao”結尾的字串
“panyuanyao”我的名字英文寫法,匹配成功。
2>字母,數字等的表示方法
2.1> . 表示除換行以外的任意字元
2.2> \w 表示任意字母、數字、下劃線
如下邊例子: [line 1] 表示a後邊可以是任意字母、數字、下劃線的字串,[line2] 被測試字串a後邊不是
字母、數字、下劃線中一種,因此匹配失敗。
void metachar() {
std::string strPattern("a\\w"); // [line 1]std::regex r(strPattern);
std::smatch result;
std::string str_test = "a*******"; // [line 2]
if (std::regex_search(str_test, result, r)) {
std::cout << result.str() << std::endl;} else {
std::cout << "smatch failed !" << std::endl;
}
}
2.3> \s:表示任意空白符(tab 包含在內)
2.4> \d :表示單個數字
2.5> [[:alpha:]]:表示任何字母
2.6> [[:alnum:]] : 表示任何字母和數字
3>次數限制
3.1> {n} : "ab{9}",匹配某字串中符合a後邊9個b的子字串
3.2> {n,}: "ak{8,}",匹配某字串中符合a後邊至少8個k的子字串
3.3> {n,m}: "ak{6, 9}", ……a後k次數為6~9 【注】不要在{}中出現空格否則會使程式崩潰3.4> * : 如 "aA*" 表示一個字串有一個a後邊跟0個或多個A
3.5> ? : 如 "aA?" 表示?之前的字元(A)在a後邊且至多一個可以沒有
3.6> + : 如 "bbbbA+" 表示一個字串必須符合bbbb後邊緊接至少有一個A或多個A
4>集合及補集
4.1> []: 使用{}表示重複次數(下邊介紹),[]用於表示一個字元集合。可以使用-來表示一個範圍([0-9]表示0~9十個數構 成的一個集合)
4.2> 補集: []中使用^來表示集合的補集如[^7-9]表示除7.8.9以外數字(0 1 2 3 4 5 6)。
5>分組 ()
作用就是組織一個單元,以便可以迴圈,或選擇(如:(cpp|cc))。使用()來進行分組,()中|表示或
6>懶惰匹配
【1】*? 表示:重複任意此,但儘可能少
【2】+? 重複一次或更多次,但儘可能少
【3】?? 重複0次或1次,但儘可能少
【4】{n,}? 重複一次或更多次,但儘可能少
【5】{n,m}? 重複n到m次,但儘可能少
三、結束語
到此正則表示式模式已經敘述完了,以後的篇章將以程式碼形式介紹c++11正則表示式庫。