前言
這篇部落格是我對正規表示式一些基礎知識的整理。
基礎部分
1.1 什麼是正規表示式
是一種特殊的字串模式
作用是匹配字串
如同用模具做產品,正規表示式就是模具,具體的字串就是產品
定義一種規則去匹配復合規則的字串
1.2 元字元介紹
「^」 : ^會匹配行或者字串的開頭,有時會匹配整個文件的起始位置
「$」: $匹配字串的結尾。
「\b」: 單詞的邊界,如在字串「
i am a boy
」,單獨匹配單詞「
boy」需要「
\bboy\b」,
\b不會匹配
boy兩邊的字元,但會識別
boy兩邊是否為字元的邊界。
「\d」: 匹配數字
「\w」: 匹配數字,字母和下劃線
「\s」: 匹配空格
「.」: 匹配除了換行符以外的所有字元,相當於」\w」的加強版,」\w」不能匹配空格
「[abc]」: 匹配包含括號內元素的字元,只匹配括號內存在的字元
1.3 幾種反義
「\w」: 匹配任意不是字母,數字,下劃線的字元
「\s」: 匹配任意不是空白符的字元
「\d」: 匹配任意非數字的字元
「\b」: 匹配不是單詞開頭或結束的位置
「[^abc]」: 匹配了除了
abc以外的任意字元
1.4 量詞
貪婪:如
「*」字元,貪婪量詞會首先匹配整乙個字串,嘗試匹配時,它會盡可能地匹配每乙個字元,如果失敗則回退(回溯)乙個字元,直到找到可以匹配的字元或者沒有字元可以回退。相比下面量詞,它的消耗是最大的。
懶惰:如
「?」它從目標的起始位置開始嘗試匹配,每次檢查乙個字元,並尋找它要匹配的內容,它會一直匹配到字串結尾處。 「*
aaaab
」匹配字串中所有的
a,正則:「a*」
「+」:
重複一次或更多
「?」:重複零次或一次 「
」:重複
n次,例如從「
aaaab
」中匹配
a並重複
2次,正則:「a」
「」:重複最少
n次最多m次
「」:重複
n0123-4567890
,格式為
0***-*******
, 正則:「
^0\d-\d$
」1.5 懶惰限定符
「*
?」:重複任意次,但盡可能少,例如「
aaaaab
」正則:「
a*?b
」,原本可以取到全部的字元
a,但因為盡可能少的匹配,所以最後得到「ab」
「+?」:重複一次以上,但盡可能少
「??」重複零次或一次,但盡可能少 「
」:重複n次到
m次,但盡可能少
「」:重複
n次以上,但盡可能少
高階部分:
2.1 捕獲分組
捕獲陣列:如(
\d),可以對捕獲分組進行向後引用,如(\d)
\d\1
這裡的「
\1」就是對(「
\d」)的後向引用。
下面為捕獲分組常用的方法:
「(exp
)」:匹配
exp,並捕獲文字到自動命名的組裡
「(?exp
)」:匹配
exp,捕獲文字到名為
arrayname
的組裡「(?:exp
)」:匹配
exp,不捕獲文字,也不建立組
2.2 零寬斷言
「(?=exp
)」:也叫零寬正**先行斷言,匹配
exp前面的文字,例如「
how are you
」,正則:「(?
.+(?=ing)
)」,這裡取
ing前面所有的字元,並定義乙個捕獲分組,該分組名為
txt,分組內的值是
ing前面的字元。
「(?<=exp
)」: 也叫零寬正回顧後發斷言,匹配
exp後面的文字:例如「
how are you
」,正則:「(?
(?<=how).+
)」,這裡取
how後面的所有字元,並定義乙個捕獲分組為
txt「(?!exp)」
2.3 負向零寬斷言
(?!exp):後面跟不是
exp的文字,例如「
aaa123
」正則:「
aaa(?!
[1-9]
)」,匹配
aaa後非數字的結果
(?!):前面不是
exp的文字
Python高階正則
1 importre2 3 p re.compile 0 9 45 m p.match 13435asadb 67print m.group 一 上面的第二行和第三行也可以合併成一行來寫 m p.match 0 9 13435asadb 效果是一樣的,區別在於第一種方式是提前對要匹配的格式進行編譯,...
js高階正則解析
1.var reg var reg 前者代表任意乙個字元而後者代表這個字串中得有乙個.2.的使用 如果單獨的乙個字元後面帶?var reg d?n?代表乙個或0個這個字元的出現 如果是量詞 和 後面帶?取消正則的貪婪性 在捕獲階段 var reg d var st ahfuoi6565232 con...
高階正則用法 預查
工欲善其事必先利其器,正規表示式無疑是乙個非常強大的工具,從txt,excel,word還有眾多編輯器,還有各種開發語言都有它的蹤影.下面就說下正規表示式較為高階的預查用法 包含4個關鍵字元順序 只能同時出現乙個 預查校驗的標誌 否定 肯定 表示捕獲分組,會把每個分組裡的匹配的值儲存起來,使用 n ...