正規表示式是經常使用的一種方法。比較有名的類庫是boost,可是這個類庫在重了。全部就像找一些輕量級的類庫。
後來發現準標準的庫tr1已經非常方便了,微軟vs2008 sp1 以上版本號都支援了。全部就直接用它非常方便了。
並且支援unicode編碼,還是非常方便的。
樣例:#include
#include
#include
int _tmain(int argc, _tchar* argv)
[**說明]
1. 建立正規表示式物件,有3中方法:
(1) 使用建構函式
std::regex_constants::syntax_option_type fl = std::regex_constants::icase; // 語法選項,能夠設定使用哪種風格的正規表示式語法等.
std::wregex regexpress(regstring, fl);
(2) 使用賦值運算子,缺點是不能指定語法選項,並且也比較低效.
std::wregex regexpress;
regexpress = regstring;
(3) 使用assign方法.
std::wregex regexpress;
regexpress.assign(regstring, fl);
構造正則物件的過稱就是所謂的"編譯".
2. regex_match() 和 regex_search()
regex_match()僅僅有在整個字串匹配正規表示式時才返回 true, 而 regex_search()在子串匹配就返回 true.
3. 匹配結果物件 std::wsmatch.
熟悉perl正規表示式的人都知道,匹配成功後能夠用 $1 $2 ... $n 來獲得子串的指, tr1 regex庫把匹配結果儲存在乙個 std::wsmatch(unicode) / std::smatch(ansi) 物件中.
std::wsmatch 是乙個由若干個 std::wssub_match 物件構成的陣列. 而 std::wssub_match 派生自 pair.
由std::wssub_match::first儲存子串的起始位置指標(事實上說是迭代器比較準確一點).
由std::wssub_match::second儲存子串的結束位置 +1 的指標(stl的通用原則,半開區間).
所以 [std::wssub_match::first,std::wssub_match::second) 就是子串的所有內容.
當然, std::wsmatch (match_result模版的提前定義類) 提供了一些簡便的方法用於訪問子串:
(1) str(idx) 方法返回相應的子串的 std::string / std::wstring 物件. 僅僅是最經常使用的.
(2) position(idx) 方法返回相應子串的起始偏移量.(不是指標,是相對於首位元組位址或者begin()的偏移量).
(3) length(idx) 返回子串的長度.
4. 替換子串.
前面說到 std::wssub_match::first / second 儲存了子串的起始/結束位置,那麼我們當然能夠用這個指標(迭代器)來替換文字(見**中的 "替換1").
或者用 std::regex_replace() 也能夠達到目的(見**中的"替換2").
幾個經常使用的表示式:
"\\b1[35][0-9]\\d|147\\d|1[8][01236789]\\d\\b";//手機號
"\\b0\\d\\-?\\d\b"; //座機
"\\b[1-9]\\d(?:19|20)\\d(?:0[1-9]|[1][012])(?#月)(?:0[1-9]|[12][0-9]|[3][01])(?#日)\\d[\d|x|x]\\b"; //18位身份證
"\\b[1-9]\\d(?:0[1-9]|[1][012])(?#月)(?:0[1-9]|[12][0-9]|[3][01])(?#日)\\d\\b"; //15位身份證
"\\b(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.)(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\b"; //ip4
"\\b(?:[a-za-z0-9_-])+@(?:[a-za-z0-9_-])+(?:\\.[a-za-z0-9_-])\\b"; //郵箱
C 正規表示式
c 中的正規表示式 1 c 中的正規表示式 jeffrey e.f.friedl寫了一本關於正規表示式的書 精通正規表示式 作者為了使讀者更好的理解和掌握正規表示式,編造了乙個故事。該書的語言以perl為主。據我所知c 中的正規表示式也是基於perl5。所以它們應該有許多的共同之處。其實,我並不打算...
C 正規表示式
正規表示式 元字元 匹配任何單個字元,匹配括號內的任何乙個字元,改變優先順序,定義提取組,將兩個匹配條件進行邏輯或運算,匹配0至多個它之前的子表示式,和萬用字元 沒關係,匹配前面的子表示式一次或多次,匹配前面的子表示式零次或一次,匹配前面表示式確定的n次,匹配前面表示式至少n次,匹配前面表示式n到m...
C 正規表示式
正規表示式元字元 1 中括號 用來描述匹配規則,乙個中括號只能匹配乙個字元 2 小括號 用來描述匹配的字串,乙個小括號表示匹配一段字串 3 大括號 用來描述匹配的具體數量 4 s 用於匹配單個空格符,包括tab鍵和換行符 5 s 用於匹配除單個空格符之外的所有字元 6 d 用於匹配從0到9的數字 7...