正規表示式

2021-07-28 15:55:21 字數 2615 閱讀 1431

元字元介紹:

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

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

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

「\d」: 匹配數字,例如要匹配乙個固定格式的**號碼以0開頭前4位後7位,如0431-5566778 正則:^0\d\d\d-\d\d\d\d\d\d\d$ 這裡只是為了介紹」\d」字元,實際上有更好的寫法

「\w」:匹配字母,數字,下劃線,例如我要匹配」adevf2414__rrz」 正則:」\w+」 這裡的」+」字元為乙個量詞指重複的次數,稍後會更加詳細介紹

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

「.」:匹配除了換行符以外的任何字元,這個算是」\w」的加強版了」\w」不能匹配 空格 如果把字串加上空格用」\w」就受限了,看下用 「.」是如何匹配字元」ad evf 2 41 4 __rrz」 正則:」.+」

「[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次
捕獲分組:

先了解在正則中捕獲分組的概念,其實就是乙個括號內的內容 如 「(\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位數字後非數字的結果

"(? 匹配前面不是exp的位置

如 "abc123 " 正則 "(? 匹配"123"前面是非數字的結果也可寫成"(?!<\d)123"

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

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

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