正規表示式快速入門

2021-08-01 12:26:20 字數 3580 閱讀 7333

.      匹配除了換行符以外的任何字元

\w 匹配字母或數字或下劃線或漢字

\s 匹配任意的空白符

\d 匹配數字

\b 匹配單詞的開始或結束

^ 匹配字串的開始

$ 匹配字串的結束

"." : 匹配除了換行符以外的任何字元,

算是"\w"的加強版了"\w"不能匹配 空格 如果把字串加上空格用"\w"就受限了,看下用 "." 如何匹配字元"b hj 4 5 d__ac"  正則:".+"

"\w":匹配字母、數字、下劃線,

例如我要匹配"pcd_45f" 正則:"\w+"  這裡的"+"字元為乙個量詞指重複的次數

"\s": 匹配空格,

例如字元 "a b c" 正則:"\w\s\w\s\w"  乙個字元後跟乙個空格

"\d": 匹配數字,例如要匹配乙個固定格式的**號碼以0開頭前4位後7位,如0737-5686123  正則:^0(\d)-(\d)$ 

"\b":不會消耗任何字元只匹配乙個位置,常用於匹配單詞邊界,如從字串中"this is regex"匹配單獨的單詞 "is" 正則就要寫成

"\bis\b"  

"^" :匹配輸入字串的開始位置

"$": 匹配輸入字串的結尾位置

元字元^(和數字6在同乙個鍵位上的符號)和$都匹配乙個位置,這和\b有點類似。^匹配你要用來查詢的字串的開頭,$匹配結尾。這兩個**在驗證輸入的內容時非常有用,比如乙個**如果要求你填寫的qq號必須為5位到12位數字時,可以使用:^\d$。

\w	匹配任意不是字母,數字,下劃線,漢字的字元

\s 匹配任意非數字的字元

\d 匹配任意的空白符

\b 匹配不是單詞開頭或結束的位置

[^x] 匹配除了x以外的任意字元

*	重複零次或更多次

+ 重複一次或更多次

? 重複零次或一次

重複n次

重複n次或更多次

重複n到m次

先解釋關於量詞所涉及到的重要的三個概念

1.貪婪(貪心) 如"*"字元 貪婪量詞會首先匹配整個字串,嘗試匹配時,它會選定盡可能多的內容,如果 失敗則回退乙個字元,然後再次嘗試回退的過      程就叫做回溯,它會每次回退乙個字元,直到找到匹配的內容或者沒有字元可以回退。相比下面兩種貪婪量詞對資源的消耗是最大的

2.懶惰(勉強) 如 "?"  懶惰量詞使用另一種方式匹配,它從目標的起始位置開始嘗試匹配,每次檢查乙個字元,並尋找它要匹配的內容,如此迴圈直到        字元結尾處

3.占有  如"+" 占有量詞會覆蓋事個目標字串,然後嘗試尋找匹配內容 ,但它只嘗試一次,不會回溯,就好比先抓一把石頭,然後從石頭中挑出**

"*"(貪婪)   重複零次或更多,例如"aaaaaaaa" 匹配字串中所有的a  正則: "a*"   會出到所有的字元"a"

"+"(占有)   重複一次或更多次

例如"aaaaaaaa" 匹配字串中所有的a  正則: "a+"  會取到字元中所有的a字元,  "a+"與"a*"不同在於"+"至少是一次而"*" 可以是0次

"?"(懶惰)   重複零次或一次

例如"aaaaaaaa" 匹配字串中的a 正則 : "a?" 只會匹配一次,也就是結果只是單個字元a

""  重複n次

例如從"aaaaaaaa" 匹配字串的a 並重複3次 正則:  "a"  結果就是取到3個a字元  "aaa";

""  重複n到m次

例如正則 "a" 將a重複匹配3次或者4次 所以供匹配的字元可以是三個"aaa"也可以是四個"aaaa" 正則都可以匹配到

""  重複n次或更多次

與不同之處就在於匹配的次數將沒有上限,但至少要重複n次 如 正則"a" a至少要重複3次

把量詞了解了之後匹配乙個固定格式的**號碼以0開頭前4位後7位正則:^0\d-\d$ 

"*?"   重複任意次,但盡可能少重複 , 如 "acbacb"  正則  "a.*?b" 只會取到第乙個"acb" 原本可以全部取到但加了限定符後,只會匹配盡可能少的字元 ,而"acbacb"最少字元的結 果就是"acb" 

"+?"  重複1次或更多次,但盡可能少重複, 與上面一樣,只是至少要重複1次, "??"  重複0次或1次,但盡可能少重複, 如 "aaacb" 正則 "a.??b" 只會取到最後的三個字元"acb"

"?"  重複n到m次,但盡可能少重複, 如 "aaaaaaaa"  正則 "a?" 因為最少是0次所以取到結果為空

"?"    重複n次以上,但盡可能少重複,如 "aaaaaaa"  正則 "a?" 最少是1次所以取到結果為 "a"

先了解在正則中捕獲分組的概念,其實就是乙個括號內的內容 如 "(\d)\d" 而"(\d)" 這就是乙個捕獲分組,可以對捕獲分組進行 後向引用 (如果後而有相同的內容則可以直接引用前面定義的捕獲組,以簡化表示式) 如(\d)\d\1 這裡的"\1"就是對"(\d)"的後向引用

如  "zery zery" 正則 \b(\w+)\b\s\1\b 所以這裡的"\1"所捕獲到的字元也是 與(\w+)一樣的"zery",為了讓組名更有意義,組名可以自定義名字

"\b(?\w+)\b\s\k\b" 用"?"就可以自定義組名了而要後向引用組時要記得寫成 "\k";自定義組名後,捕獲組中匹配到的值就會儲存在定義的組名裡

下面列出捕獲分組常有的用法

"(exp)"    匹配exp,並捕獲文字到自動命名的組裡

"(?exp)"   匹配exp,並捕獲文字到名稱為name的組裡

"(?:exp)"  匹配exp,不捕獲匹配的文字,也不給此分組分配組號

"(?=exp)"  匹配exp前面的位置

如 "how are you doing" 正則"(?.+(?=ing))" 這裡取ing前所有的字元,並定義了乙個捕獲分組名字為 "txt" 而"txt"這個組裡的值為"how are you do";

"(?<=exp)"  匹配exp後面的位置

如 "how are you doing" 正則"(?(?<=how).+)" 這裡取"how"之後所有的字元,並定義了乙個捕獲分組名字為 "txt" 而"txt"這個組裡的值為" are you doing";

"(?!exp)"  匹配後面跟的不是exp的位置

如 "123abc" 正則 "\d(?!\d)"匹配3位數字後非數字的結果

"(?

正規表示式快速入門

你是不是經常忘記正規表示式中的語法規則 優先順序順序 界定符 定位符等等,每次看了忘忘了看,怎麼辦的,多練習或者小抄本記起來!1 常用元字元 匹配處換行符以外的任意字元 w匹配字母或數字或下劃線或漢字 s匹配任意的空白符 d匹配數字 b匹配單詞的開始或結束 匹配字串的開始 匹配字串的結束 2 常用限...

正規表示式快速入門

一 元字元 w,s,b,d 1.後面四個有相應的大寫,表反義。匹配行開頭,只有當其在 中表示 非 2.b 匹配單詞的開始或結束,而 匹配除換行符外的任意字元。eg 匹配乙個非空行 bstr 匹配 str開頭的字串 二 重複 請叫上面四位為 四大金剛 0個或多個 個或多個 個或 個 有三種寫法,和 不...

快速入門正規表示式

本文是一篇正則的快速入門教程,並未涉及分組 反義 後向引用 貪婪懶惰等高階內容,旨在可以快速學會如何去理解那些常見的正規表示式 一 前言 1.1 何為正規表示式 正規表示式,又稱規則表示式。英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。...