c++ 正規表示式-基礎操作
philpanic9 2019-03-04 21:50:43 13462 收藏 30
展開正規表示式是乙個非常強大的工具,主要用於字串匹配。如何在c++中使用正規表示式?下面就簡要介紹一下c++中正規表示式相關函式的用法。
本篇部落格中所涉及到的函式及其功能如下表所示:
函式 功能
regex_match(s,re) 目標字串s和正規表示式re是否完全匹配
regex_search(s,match_result,re) 目標字串s是否存在某個子串與正規表示式re匹配
regex_replace(s,re,s1) 用s1替換目標字串s中與正規表示式re匹配的子串
稍微詳細一點再囉嗦兩句:
regex_match(s,re),這個函式表中已經列出:判斷正規表示式re和s是否完全匹配,能從頭匹配到尾才叫完全。
regex_search(s,match_result,re),匹配s是否有子串能匹配re(可理解為re能不能匹配s中的一部分),如果能,就把匹配到的子串的相關資訊存出match_result中,至於到底存了子串的哪些資訊,參見regex_search函式的詳細資訊,關於match_result的基本使用下面的示例**中會有所體現。
regex_replace(s,re,s1),替換函式,這裡有個很神奇的地方就是s1,當s1中含有』$'時,替換得到的結果就會有所不同,具體見下面的示例**。
上面說的一大堆基本沒什麼用,建議將示例**粘去跑一跑,改一改,再跑一跑。
示例**:
#include
#include
#include
using namespace std;
void regex_match_test()
", // 花括號,匹配前面字元至少 n 次,但是不超過 m 次。
"(ccaatt)", //(xyz) 字元組,按照確切的順序匹配字元xyz。
"(c(h|d|f)aatt)|(ccaatt)", // | 分支結構,匹配符號之前的字元或後面的字元。
// \ 轉義符,它可以還原元字元原來的含義,允許你匹配保留字元 [ ] ( ) . * + ? ^ $ \ |
"^ccaatt", // ^ 匹配行的開始
"ccaatt$" // $ 匹配行的結束
};for(int i = 0;i < patterns.size(); i++)
regs.push_back(regex(patterns[i]));
for(int i = 0;i < regs.size(); i++)
}void regex_search_test()
;regex color_regex("#[a-f0-9]""[a-f0-9]""[a-f0-9]");
// 簡單匹配
for (const auto &line : lines)
std::cout << '\n';
// 展示每個匹配中有標記子表示式的內容
smatch color_match;
for (const auto& line : lines)
}// 重複搜尋(參閱 std::regex_iterator )
std::string log(r"( \
speed: 366 \
mass: 35 \
speed: 378 \
mass: 32 \
speed: 400 \
mass: 30)");
regex r(r"(speed:\t\d*)");
smatch sm;
while(regex_search(log, sm, r))
// c 風格字串演示
cmatch cm;
if(regex_search("this is a test", cm, regex("test")))
cout << "\nfound " << cm[0] << " at position " << cm.prefix().length() << endl;
}void regex_replace_test()
} for brown fox",replace_result;
std::regex double_brace("(\\\\})");
//regex_replace返回值即為替換後的字串
replace_result = regex_replace(text,double_brace,"*");
cout << replace_result << "\n";
//構造存有結果的字串,[$&]即為用將匹配成功部分括起來
// $& inserts the matched substring.
cout << regex_replace(text, double_brace, "[$&]") << '\n';
// $i則輸出double_brace中第i個括號匹配到的值
cout << regex_replace(text, double_brace, "$1") << '\n';
cout << regex_replace(text, double_brace, "[$2]") << '\n';
cout << regex_replace(text, double_brace, "$3") << '\n';
}
C 正規表示式 基礎操作
正規表示式是乙個非常強大的工具,主要用於字串匹配。如何在c 中使用正規表示式?下面就簡要介紹一下c 中正規表示式相關函式的用法。本篇部落格中所涉及到的函式及其功能如下表所示 函式功能 regex match s,re 目標字串s和正規表示式re是否完全匹配 regex search s,match ...
C 正規表示式基礎
正規表示式 可以利用數學演算法解決計算機中的文字檢索和匹配問題 是一種專門用於字串處理的語言 檢索 從字串中獲取我們想要的部分 匹配 判斷給定的字串是否符合正規表示式的過濾邏輯 定位字元 string ss i am blue cat string newstr regex.replace ss,開...
正規表示式 1 正規表示式基礎
1.正規表示式基礎 正規表示式描述了一種字串匹配的模式,即可以使使用者通過一系列普通字元或特殊字元構建能夠明確描述文字字串的匹配模式,可以用來檢查某個字串是否含有某種子字串,將匹配的子字串做替換或者從某個字串中取出符合某個條件的子字串等。1.1 正規表示式的基本結構 乙個正規表示式就是由普通字元 如...