C++正则表达式
C++正則表達(dá)式
-
表達(dá)式:
- 一般字符:可匹配目標(biāo)序列中相同的字符
- 通配符 . :可匹配目標(biāo)序列中除了換行符外的任何字符
- [expr]形式表達(dá)式: 可以匹配目標(biāo)序列中包含在表達(dá)式expr定義集內(nèi)的字符或者排序規(guī)則表達(dá)式,采用 [^**expr],**可匹配目標(biāo)序列中未包含在表達(dá)式expr定義集中的字符或排序規(guī)則。
-
單個(gè)字符 : 如 [A] 匹配 A。
-
ch1 - ch2形式的字符域: 如 [A-F]匹配大寫A到F中的任何一字母。
-
**[:name:]形式字符類: [[ :alpha:]]**匹配一個(gè)字母(不區(qū)分大小寫)。
字符類名說明 alnum 字母(不區(qū)分大小寫)和數(shù)字 alpha 字母(不區(qū)分大小寫) blank 空格或制表符 cntrl 文件格式轉(zhuǎn)義字符 digit 數(shù)字 graph 字母(不區(qū)分大小寫) 、數(shù)字、英文標(biāo)點(diǎn) lower 小寫字母 upper 大寫字母 print 字母(不區(qū)分大小寫)、數(shù)字、英文標(biāo)點(diǎn)和空格 punct 英文標(biāo)點(diǎn) space 空格 xdigit 表示十六進(jìn)制字符(abcdefABCDEF) d 與digit相同 s 與space相同 w 與alnum相同
-
- 定位點(diǎn):定位點(diǎn)**^匹配目標(biāo)序列的開頭,$**可匹配目標(biāo)序列的末尾。定點(diǎn)可匹配目標(biāo)字符串的位置,而不匹配字符。
- 轉(zhuǎn)義序列:
- 文件格式轉(zhuǎn)移:
-
\、\f、\n、\r、\t 和 \v 分別表示匹配目標(biāo)序列中的反斜杠、換頁符、回車符、水平制表符和垂直制表符
-
DSW字符轉(zhuǎn)義:
轉(zhuǎn)義序列等效命名類默認(rèn)命名類 \d [ [:d:] ] [[:digit:]] \D [^[: D : ]] [^[: digit :]] \s [[: s :]] [[: space :]] \S [^[: S :]] [^[: space :]] \w [[: w :]] [a-zA-Z0-9] \W [^[: W :]] [^a-zA-Z0-9 ] -
8進(jìn)制數(shù)轉(zhuǎn)義: \ooo, ‘ooo’表示三位八進(jìn)制數(shù)目,如\101匹配字符A
-
16進(jìn)制轉(zhuǎn)義: \xhh , “hh”表示兩位十六進(jìn)制, 如\x41 匹配字符A
-
Unicode轉(zhuǎn)義: \uhhhh, “hhhh”表示思維十六進(jìn)制數(shù),如\u0041匹配字符A
-
- 文件格式轉(zhuǎn)移:
-
量詞:
- 指定要匹配的表達(dá)式出現(xiàn)的次數(shù),如:x{1,1}表示必須匹配一個(gè)x,x{1,3}可以匹配1-3個(gè)x。
量詞含義 E? 匹配0次或者1次E(表達(dá)式),等價(jià)于E{0,1} E+ 至少匹配一次E,等價(jià)于E{1,} E* 匹配0次或者多次E,等價(jià)于E{0,} E{n} 匹配n次E,等價(jià)于E{n,n} E{n, } 至少匹配n次E E{, n} 至多匹配n次E E{n,m} 至少匹配n次。至多匹配m次 例如:[A-C]+ 可以匹配“AAA”, “C”
-
斷言
斷言含義 \b 一個(gè)單詞的邊界 \B 一個(gè)非單詞的邊界 (?=E) 表達(dá)式后面緊跟著E才匹配成功,但不會(huì)改名目標(biāo)序列中匹配的位置 (?!E) 表達(dá)式后面緊跟著E才匹配成功,但不會(huì)改名目標(biāo)序列中匹配的位置 (?:E) 例如:\bmail\b 匹配就是一個(gè)單詞mail,This is a T(?!est):如果T后面沒有est就匹配,主要用于替換, This is a T(?=est) 表示如果T 后面有est 就匹配,這主要用于替換
-
實(shí)例
在C++中正則表達(dá)式需要用到regex庫:常用函數(shù):
函數(shù)名稱解釋 regex_match 將一個(gè)字符序列與正則表達(dá)式進(jìn)行匹配 regex_search 查找字符序列中與正則表達(dá)式匹配的結(jié)果,找到第一個(gè)之后就會(huì)返回結(jié)果并停止查找 regex_replace 替換字符到正則表達(dá)式匹配到字符序列的位置。 -
檢驗(yàn)郵箱格式:
郵箱的一般格式:xxx@xxx.com,驗(yàn)證 xxx@163.com 格式的郵箱。
正則表達(dá)式:[[:graph:]]+@163[.]com,這里將.用方括號括起來是因?yàn)?在正在表達(dá)式中是一個(gè)通配符。
#include <iostream> #include <regex>using namespace std;int main() {string re = "[[:graph:]]+@163[.]com";regex rule(re);string str = "acvds.cpp@163.com";cout << regex_match(str, rule) << endl; //1cout << regex_replace(str, rule,"ok") << endl; //okreturn 0; } #include <regex> #include <iostream> using namespace std;int main() {string re = "E(?!xpression)[a-z]{0,}";regex rule(re);string str = "Regular E E E";cout << regex_replace(str, rule, "Expression") << endl; //Regular Expression Expression Expressionsystem("pause");return 0; } #include <iostream> #include <regex> using namespace std; int main() {string str = "Hello 2019, Bye 2018";smatch result;regex pattern("\\d{4}"); //匹配四個(gè)數(shù)字//迭代器聲明string::const_iterator iterStart = str.begin();string::const_iterator iterEnd = str.end();string temp;while (regex_search(iterStart, iterEnd, result, pattern)){temp = result[0];cout << temp << " ";iterStart = result[0].second; //更新搜索起始位置,搜索剩下的字符串}cout << endl;return 0; }
總結(jié)
- 上一篇: 计算机排版自然段视频教程,排版教程(新手
- 下一篇: springmvc 中@Controll