優勢
: 使得字串的處理更加簡單
一些相關的操作:
驗證:檢查字串是否是想要的合法性 決策
:判斷乙個輸入標書哪種字串 解析
:從輸入的字串中查詢自己想要的資訊 轉換
:搜尋字串,並將字串替換為新的格式化的字串 遍歷
:搜尋字串所有出現的地方
符號化:根據一組分隔符將乙個字串分解為多個子字串
一些重要術語:
模式:正規表示式實際上和給定序列中所有字元是否匹配 匹配
:判斷正規表示式和給定的序列
[first,last)
中所有字元是否匹配 搜尋
:判斷在給定的序列
[first,last]
中是否存在匹配給定正規表示式的子字串 替換
:在給定的序列中識別子字串,然後將子字串替換為從其他模式計算得到的新子字串
現在講一些
c++11
標準中如何使用正規表示式 1.
正規表示式模式是乙個字串行
(說透了底層還不是利用簡單的
c++語法進行字元的切割
分離等等的操作只不過普通人寫的沒那麼好沒那麼健壯)
這個模式表示了要匹配的內容,正規表示式中任何字元都表示要匹配自己,但是有些字元
除外 例如
:^$ \ . * + ? () {} | 等
注意:在c++
中轉義反斜槓 例如 對於需要利用正規表示式匹配單個的*字元
需要這樣寫
\\*。 1
)^和 $
^字元匹配字串的開頭位置
$字元匹配字串的結尾位置 例如
:^test$
只能匹配
test
不能匹配其他 2
)萬用字元.
萬用字元字元可以匹配除了換行以外的所有字元 例如
:a.b
可以匹配
acbabb ayb a0b等等(
中間只有乙個字元)
3)重複 *
匹配零次或者多次之前的部分 例如
:a*b
可以匹配
b,ab,aab,aaa,aaaa...b;
+匹配一次多著多次之前的部分 例如
:(上乙個看懂就不舉例了)
?匹配零次或者一次之前的部分
表示區間重複 a
表示重複匹配an次
a表示重複匹配
an次或者更多次 a
表示重複匹配an到
m之間的那麼多次包含m,
n 4)替代
例如 a|b
表示匹配a或者
b 5)字符集匹配
[a1a2a3]
表示可以匹配
a1,a2,a3
中任意字元 例如
:ab[cde]
表示可以匹配
abcabd abe
如果要匹配
26個字母中之一呢 不會
[a|b|c|d....]
這樣吧
於是字元類出現了
alnum:
小寫字母 大寫字母和數字
alpha:
小寫字母和大寫字母
blank:
空格或者製表符
cntrl:
檔案格式轉義字元 例如換行符 和 回車符
(\f\n \r \t)
digit:數字
graph:
小寫字母 大寫字母 數字和標點符號
lower:
小寫字母
print:
小寫字母 大寫字母 數字標點符號和空白字元
punch:
標點符號字元
space:
空白字元
upper:
大寫字母
xdigit:
數字和'a','b','c','d','e','f'
。'a','b','c','d','e','f' d:
數字 s:空白字元 w:
小寫字母 大寫字母和數字
先就這幾種比較簡單的 呵呵
現在可以使用**案例了:
我們使用正規表示式來看看乙個時間的輸入是否正確
regexre("^(\\d)/(?:0?[1-9]|1[0-2])/(?:0?[0-9]|[1-2][0-9]|3[0-1])$"); *
表示正則的形式我們首先來分析下
^表示開始 最後的
$表示結束
*\\d
表示是乙個
4位的數字/表示
/用來分隔時間
(所以輸入的時候要注意)
*月份的表示形式
(0?[1-9]|1[0-2])1-9
月份 1011 22 *
後面的日期和月份一樣來分析
(包括對時間的檢測)
#include
#include
usingnamespace std;
boolistrue(int year,int month,int day) //
進行時間的驗證
if(day> days) //
在相應的月份比較過後
returnfalse; //
進行時間的斷定
returntrue; }
intmain()
)/(?:0?[1-9]|1[0-2])/(?:0?[0-9]|[1-2][0-9]|3[0-1])$");
while(true)
else
cout<<"
你的輸入不正確
!"< }
return0; }
進行字串的讀取
#include
#include
usingnamespace std;
intmain()
} #include
#include
usingnamespace std;
intmain()
} /
//現在進行字串的替換
regex_replace
#include
#include
usingnamespace std;
intmain()
//替換這個函式的支援還不錯結果也很正確 //
這個**介紹了一些正規表示式:
最後,感覺
vs編譯器和
codeblock
對正則的支援還不是那樣理想正則很強大 這裡先介紹一部分。滿足下我的求知慾(呵呵
)
c 11 正規表示式
include include 正規表示式標頭檔案 using namespace std regex search 檢索 regex replace 將檢索到的物件進行替換替換 match 是否匹配 void main cout 正規表示式實現字串的替換 void main 匹配時間 void m...
C 11 正規表示式
0.常用正規表示式 中文字元 u4e00 u9fa5 雙位元組字元 包括漢字在內 x00 xff 空白符 n s r 國內 號碼 d d d 18位身份證號 d d d d d 0 9 x 年 月 日 格式日期 0 9 1 9 0 9 1 9 0 9 0 9 1 9 0 9 1 9 0 9 0 13...
C 11 正規表示式
1 驗證整個字串是否符合給定正規表示式 2 在字串中查詢符合給定正規表示式的子串 3 在字串中查詢符合正規表示式的子串,並替換 上述三點分別對應c 11中的三個函式,包含標頭檔案 include 使用函式std regex match 一般都是分三步 1 定義正規表示式 std regex 類,將正...