字元
描述\cx
匹配由x指明的控制字元
\f匹配乙個換頁符
\n匹配乙個換行符
\r匹配乙個回車符
\s匹配任何空白字元,包括空格、製表符、換頁符等等。
\s匹配任何非空空白字元
\t匹配乙個製表符
\v匹配乙個垂直製表符\轉義
\d匹配數字字元,相當於[0-9]
\d匹配非數字字元,等效於[^0-9]
\w匹配任何字母數字和下劃線,等效於[a-za-z0-9_]
\w匹配任何非字母數字和下劃線,等效於[^a-za-z0-9_]
\xnn表示數字,和ascii碼表對應
\num
num表示數字,表示捕獲到的第乙個表示式
\n表示反向引用或者八進位制數
\un匹配unicode
$匹配輸入字串的結尾位置
()標記乙個子表示式的開始和結束位置
*匹配前面的子表示式零次或多次
+匹配前面的子表示式一次或多次
.匹配除換行符\n之外的任何單字元
[表示乙個字符集的開始
?匹配前面的子表示式零次或一次,或指明乙個非貪婪限定符
\將下乙個字元標記為其本身
^匹配輸入字串的開始位置。除非在中使用,此時表示不接受該字元集合
匹配確定的n次
至少匹配n次
n<=m,最少匹配n次且最多匹配m次
*和+都是貪婪的,意思是會盡可能的多匹配,但是在後面加上?就可以使他們變成非貪婪的
非貪婪表示最小匹配。
字元描述
^匹配輸入字串開始的位置
$匹配字串的結尾位置
\b匹配乙個單詞的邊界,即字與空格間的位置
\b非單詞邊界匹配
專案描述
(express)
匹配並捕獲匹配的該字串,可以使用\n來指定
(?:express)
匹配的結果會顯示,但是無法通過\num來引用
(?=express)
非捕獲匹配,匹配的結果不顯示。向前查詢
(?<=express)
非捕獲匹配。向後查詢
(?非捕獲匹配。負向後查詢
(?!express)
非捕獲匹配。負向前查詢
regex_match返回乙個bool值,表示是否完全匹配。
regex_match可以有2個引數,待匹配字串、正規表示式
std::string str = "once again"; //待匹配字串
std::regex expression("[a-z]+\\s[a-z]+"); //正規表示式
bool boolean; //返回值true or false
boolean = std::regex_match(str, expression);
regex_match也可以有3個引數,待匹配字串,需要儲存的字串,正規表示式
std::string str = "once again";
std::regex expression("([a-z]+)\\s([a-z]+)");
std::smatch result; //儲存結果容器
bool boolean;
boolean = std::regex_match(str, result, expression);
for(int i=0;iregex_search表示搜尋匹配,只要待匹配字串中的子字串符合正規表示式,則返回true,否則返回false。
與regex_match一樣,regex_search也可以有2個引數,3個引數,甚至是4個引數。
2個引數判斷子字串是否符合正規表示式
3個引數可以將第乙個符合正規表示式的子字串儲存下來
4個引數可以將所有符合正規表示式的子字串儲存下來
下面只講4個引數的情況
std::string str = "once again boom";
std::regex expression("[a-z]+");
std::smatch result;
std::string::const_iterator start = str.begin(); //定義兩個迭代器
std::string::const_iterator end = str.end();
while(std::regex_search(start, end, result, expression))
regex_replace替換其中符合正規表示式的子字串
std::string str = "once again";
std::regex expression("([a-z]+)");
std::cout << std::regex_replace(str, expression, "hello") << std::endl;
//輸出:
//hello hello
regex_replace調換順序
std::string str = "once again";
std::regex expression("([a-z]+)(\\s)([a-z]+)");
std::cout << std::regex_replace(str, expression, "$3$2$1") << std::endl;
//輸出
//again once
參考
正規表示式-菜鳥教程
1.正規表示式的作用是是資訊的搜尋和替換
2.不同語言對於正規表示式的底層實現方式有差異
3.正規表示式可以直接使用文字
4.^表示非時,是作用於[ ]中所有的字元,而不僅限於^後面的那個字元
5.匹配十六進製制\x,使用八進位制\0
6.也可以使用posix類類匹配,[:alnum:]、[:alpha:]等
7.?可以使*或者+變成非貪婪型(匹配的越少越好)
8.|表示或,表示兩邊可以任選乙個,但是要注意或的邊界,即|表示的並不是左邊的乙個字元,或者右邊的乙個字元,而是左邊的一群字元,和右邊的一群字元
9.子表示式用()來表示,在同乙個表示式中可以用\1,\2,\3來表示子表示式的次序。如果在另外乙個表示式中需要引用該子表示式的話,需要用$1,$2,$3來表示
10.子表示式的替換操作,替換操作也是乙個正規表示式
\l:把l和e之間的字元全部轉為小寫
\u:把u和e之間的字元全部轉為大寫
\e:終結l和u
10.向前查詢(?=)的長度是可變的,向後查詢的長度是固定的(?<=)
11.嵌入條件查詢,(?(1)a|b)表示第乙個查詢條件知否存在,存在則選擇a,不存在則選擇b
12.前後查詢條件?(?=)
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...