先看看如何用c++11中的regex匹配乙個電子郵箱位址。
std:
:cout<<"test regex ****** usage:\n"
;std:
:string email_pattern("(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w+)+)");
try}
catch (std:
:regex_error e)
std:
:cout<<"test regex ****** usage done.\n"
<:
:endl;
c++中的regex預設使用ecma-262正規表示式規範,這也是眾多瀏覽器所使用的標準。
注意到email_pattern中有好多雙斜線,這是因為除了regex模組要做一次轉**析外,c++ string也會對字串做一次轉**析。
在構造regex物件時,可以指定多種標識已實現特定的效果。這裡以使用regex::icase達到不區分大小寫的匹配為例。
std::cout
<<"test regex icase:\n";
try;
for(auto fn : test_filenames)
}}catch (std::regex_error e)
std::cout
<<"test regex icase done.\n"
<
std:
:cout<<"test regex iterator usage:\n"
;try
}catch (std:
:regex_error e)
std:
:cout<<"test regex iterator usage done.\n"
<:
:endl;
regex也支援子表示式,和其他正規表示式一樣,使用括號括起來的構成乙個子表示式。在匹配結果中,序號0表示整個匹配結果,序號1表示子表示式1的匹配結果……
下面以乙個座機**號碼的匹配驗證為例,說明子表示式的運用:
std:
:cout<<"test regex sub_match usage:\n"
;std:
:string phone_pattern = "(\\()?(\\d)(\\))?([- ])?(\\d)";
try;
for(auto fn : test_phones)
else
std:
:cout<.str()<:endl;}}
}catch (std:
:regex_error e)
std:
:cout<<"test regex sub_match usage done.\n"
<:
:endl;
regex同樣提供了替換功能。將替換功能和子表示式結合起來,可以實現字串的格式化功能:
std
::cout
<<"test
regex
replace
usage:\n";
trycatch (std
::regex_error
e)std
::cout
<<"test
regex
replace
usage
done.\n"<::endl;
其中format字串中2和
2
和5就分別表示第二個子表示式和第5個子表示式。
整個測試程式的輸出結果如下:
test regex ****** usage:
yubo1911@163
.com
test regex ****** usage done.
test regex icase:
cpp file: regex.cpp
cpp file: template.cpp
cpp file: class.hpp
test regex icase done.
test regex iterator usage:
yubo1911@163
.com
test regex iterator usage done.
test regex sub_match usage:
010-82224567
(020)62334567
(021) 22346543
0357-4223456
test regex sub_match usage done.
test regex replace usage:
formated phone: yubo: 020-85776452
test regex replace usage done.
C 11 新特性之Lambda表示式
一 lambda表示式 c 11中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或exception 宣告 返回值型別 可以看到,lambda主要分為五個部分 函式物件引數 操作符過載函式引數...
C 11正規表示式
優勢 使得字串的處理更加簡單 一些相關的操作 驗證 檢查字串是否是想要的合法性 決策 判斷乙個輸入標書哪種字串 解析 從輸入的字串中查詢自己想要的資訊 轉換 搜尋字串,並將字串替換為新的格式化的字串 遍歷 搜尋字串所有出現的地方 符號化 根據一組分隔符將乙個字串分解為多個子字串 一些重要術語 模式 ...
c 11 正規表示式
include include 正規表示式標頭檔案 using namespace std regex search 檢索 regex replace 將檢索到的物件進行替換替換 match 是否匹配 void main cout 正規表示式實現字串的替換 void main 匹配時間 void m...