正規表示式

2022-01-29 20:54:53 字數 2676 閱讀 6344

元字元介紹

"^" :^會匹配行或者字串的起始位置,有時還會匹配整個文件的起始位置。

"$" :$會匹配行或字串的結尾

例如:^0aasd y$

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

\b 不會匹配is 兩邊的字元,但它會識別is 兩邊是否為單詞的邊界

"\d": 匹配數字,

例如要匹配乙個固定格式的**號碼以0開頭前4位後7位,如0737-5686123 正則:^0\d\d\d-\d\d\d\d\d\d\d$ 這裡只是為了介紹"\d"字元,實際上有更好的寫法會在 下面介紹。

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

例如我要匹配"a2345bcd__ttz" 正則:"\w+" 這裡的"+"字元為乙個量詞指重複的次數,稍後會詳細介紹。

"\s":匹配空格

例如字元 "a b c" 正則:"\w\s\w\s\w" 乙個字元後跟乙個空格,如有字元間有多個空格直接把"\s" 寫成 "\s+" 讓空格重複

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

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

"[abc]": 字元組 匹配包含括號內元素的字元

這個比較簡單了只匹配括號內存在的字元,還可以寫成[a-z]匹配a至z的所以字母就等於可以用來控制只能輸入英文了,

幾種反義

寫法很簡單改成大寫就行了,意思與原來的相反,這裡就不舉例子了

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

"\s" 匹配任意不是空白符的字元

"\d" 匹配任意非數字的字元

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

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

量詞

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

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

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

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

"*"(貪婪) 重複零次或更多

例如"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\d\d\d-\d\d\d\d\d\d\d可以改為"0\d+−\d7可以改為"0\d+−\d7"。

這樣寫還不夠完美如果因為前面的區號沒有做限定,以至於可以輸入很多們,而通常只能是3位或者4位,

現在再改一下 "^0\d-\d"如此一來區號部分就可以匹配3位或者4位的了

懶惰限定符

"*?" 重複任意次,但盡可能少重複

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

"+?" 重複1次或更多次,但盡可能少重複

與上面一樣,只是至少要重複1次

"??" 重複0次或1次,但盡可能少重複

如 "aaacb" 正則 "a.??b" 只會取到最後的三個字元"acb"

"?" 重複n到m次,但盡可能少重複

如 "aaaaaaaa" 正則 "a" 因為最少是0次所以取到結果為空

"?" 重複n次以上,但盡可能少重複

如 "aaaaaaa" 正則 "a" 最少是1次所以取到結果為 "a"

分組在正則中用()表示,根據小菜理解,分組的作用有兩個

(1)將某些規律看成是一組,然後進行組級別的重複,可以得到意想不到的效果。

(2) 分組之後,可以通過後向引用簡化表示式。

深入理解正規表示式

正規表示式 正規表示式 總結

非負整數 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正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...