日誌 c c 正規表示式 regex

2021-07-09 08:09:53 字數 2893 閱讀 9146

正規表示式(regular expression) 是對於字串匹配的一種方法。

正規表示式可以用來檢查乙個字串是否含有某種子字串,將匹配的子字串替換,或者從某個串中取出符合某種條件的子字串。

在c中一般用regex這個類來使用的。 很多介面都封裝的這個類中

1、正規表示式的基本語法

1.1 特殊含義的字元

^  指出乙個字串的開始   例如 "^hello" 表示以hello開始的字串,「hello 妹子」, "hello 軟妹子" 都是符合定出的規則

$ 指出乙個字串的結束    例如「嘿嘿黑$" 表示一嘿嘿嘿結尾的字串, 例如」呵呵嘿嘿嘿「,」hello 嘿嘿嘿「

*  表示沒有或者多個   「hello*」 表示乙個字串中含有乙個子串是累似於 「hello」, 「hellooo」, 「helloooo.....」等等

+ 表示後面有至少乙個以上

?  表示字串hell後面跟著0個或者乙個o

同時大括號可以決定後面跟幾個

「ma」

表示乙個字串有乙個m跟著3個a   「maaa」

「ma」 表示乙個字串有乙個m後面至少跟了3個a   類似與 +

」ma「表示乙個字串有乙個m後面有3到6個a

|  或操作

」meizi | ruanmeizi「  表示乙個字串有」meizi「 或者 "ruanmeizi" 這兩個字串

」(b | cd) ef「

表示某個字串有」bef"  或者 」cdef「 這兩個字串

」(a "| b) * c)「

表示c前面有 0 | n 個 a | c   例如"ac",」abc「, "aac", "ababc".....

. 可以替代任何字元

」a.[0-9]「  表示乙個字串有乙個」a" 後面跟著乙個任意字元和乙個數字;

"^.$"表示有任意三個字元的字串(長度為3個字元)

方括號表示某些字元雲遜在乙個字串中的某一特定位置出現:

"[ab]" 表示乙個字串有乙個」a「 或 」b「 (相當於」a | b「)

"[a-d]" 表示乙個字串包含小寫的」a」 到 「d「中的乙個(相當於 "a|b|c|d" 或者 」[abcd]")

"^[a-za-z]"表示乙個以字母開頭的字串

「[0-9]%」表示乙個百分號前有一位的數字

「,[a-za-z0-9]$」表示乙個字串以乙個都好後面跟著乙個字母或數字結束

你也可以在方括號裡用『^』表示不希望出現的字元,『^』應在方括號裡的第一位

「%[^a-za-z]%」 表示兩個百分號中不應該出現字母

1.2 字符集

」^(\d)$「表示乙個字元為10進製的數字

"^(\l)$"表示乙個字元為小寫的字元

"^(\s)$"表示乙個字元的空白符

"^(\u)$"表示乙個字元的大寫字母

"^(\w)$"乙個字母 a~z a~z 或者數字 0~9 或者下劃線

"^(\d)$"除了 \d的之外字元

」^(\l)$「

除了\l的之外字元

"^(\s)$"除了\s的之外字元

"^(\u)$」除了\u的之外字元

"^(\w)$"除了'w之外的字元

2、正規表示式的應用事例通俗說明

2.1 校驗是否全由數字組成

「^[0-9]$」

^表示大頭的字元要匹配緊跟^後面的規則

$表示大頭的字元要匹配緊靠$前面的規則

中的內容是可選字符集

[0-9] 表示要求字元範圍在0-9 之間

表示數字字串長度合法為1到20, 即為[0~9]中的字元出現次數的範圍是1到20次

^ 和 $ 成對使用表示要求整個字串完全匹配定義的規則,而不是只匹配字串中的乙個子串

2.2 校驗登入名:只能輸入5~20個以字母開頭、可帶數字、「_"、」." 的子串

」^[a-za-z]([a-za-z0-9]|[._])$「

^[a-za-z] 表示第乙個字元要求是字母

([a-za-z0-9]|[._])表示從第二位開始(因為他金庚在上個表示式後面)的乙個長度為4到19為的字串,他要求是有大小寫字母、數字或者特殊字符集[._]組成

2.3  校驗使用者名稱:只能輸入1~30個以字母開頭的子串

"^[a-za-z]$"

2.4 校驗密碼:只能輸入6-20個字母、數字、下劃線

"^(\w)$"

3、 關於c++的正規表示式的用法

下面這個事例是最簡單的用法。  大家就舉一反三吧

#include #include using namespace std;

int main()

$");

// regex_match() 是比較的 如果符合就返回true 如果不符合則返回false

if ( regex_match("24312k",pattern)== false)

if ( regex_match("12345543", pattern) == false)

printf("this string is conform\n");

getchar();

return 0;

}

從示例程式可以看出 先宣告乙個regex型別的物件,並通過建構函式來定義規則,  之後只要呼叫regex_match來進行匹配, 如果匹配成功則返回true,如果匹配不成功則返回false。  

4、 regular expression 的內部實現

關於regular expression的實現, 用到了不少的自動機理論(automata theory)的只是, 有興趣的可以找這方面的資料來看,這本書"introduction to automata theory, languages, and computation" 寫的很好, 編譯遠離的書也有這方面的內容

正規表示式regex

正規表示式 regular expression 是乙個字串,表示一定的規則 api文件的pattern類中有其具體的規則定義 注意 regex嚴格區分大小寫 package cn.itcast.demo02 public class regexdemo02 檢驗郵箱位址是否合法 規則 123456...

RegEx正規表示式

eg select prod name from products where prod name regexp 000 描述了乙個規則,通過這個規則可以匹配一類字串平台雲 字母 數字 漢字 下劃線 以及沒有特殊定義的標點符號,都是 普通字元 能夠與多種字元匹配的表示式 注意區分大小寫,大寫是相反的...

Regex正規表示式學習

1.檔名查詢常用的兩通配付是 其中 任意,代表乙個字元,舉例匹配.txt檔案 txt,匹配擴充套件是3字元 2.正規表示式中 和 匹配任意字元用 匹配乙個支付 舉例匹配.txt檔案 txt 其中 需要用 進行轉義,匹配副檔名是3字元 3.正規表示式的分類,可以按照是否大小寫,是否標點符號,是否數字進...