C 11正規表示式

2021-06-25 08:03:47 字數 3249 閱讀 8434

優勢

: 使得字串的處理更加簡單

一些相關的操作:

驗證:檢查字串是否是想要的合法性 決策

:判斷乙個輸入標書哪種字串 解析

:從輸入的字串中查詢自己想要的資訊 轉換

:搜尋字串,並將字串替換為新的格式化的字串 遍歷

:搜尋字串所有出現的地方

符號化:根據一組分隔符將乙個字串分解為多個子字串

一些重要術語:

模式:正規表示式實際上和給定序列中所有字元是否匹配 匹配

:判斷正規表示式和給定的序列

[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 類,將正...