用正則表達式在 sublime 編輯器中搜索文本味咳,是我的一個趣味。
常出現(xiàn)的場景是椿每,搜索 A 位置旁邊的 B 坞生,比如:
給定:“class 1,class a,class 一”
獲取結果:“1”
、“a“
喜每、”一”
這里就可以用到斷言务唐,斷定 class的位置去尋找后面的元素。
官方給斷言的分類带兜,叫:零寬度正預測先行斷言枫笛、零寬度正回顧后發(fā)斷言……
設計者妖獸啊,起這么繞口難理解的名字刚照!實際上非常簡單刑巧,我總結下
斷言公式:
假定 B 代表 “1”、“a“无畔、”一” 啊楚,我們想要的結果; A 代表我們已知的 "class" 斷言
(?<=A)B # 匹配前面是 A 的 B
(?<!A)B # 匹配前面非 A 的 B
B(?=A ) # 匹配后面是 A 的 B
B(?!A) # 匹配后面非 A 的 B
(? ) 雖然同是括號,但這貨多了個問號在前面浑彰,它就不是分組恭理, 而是一個位置斷言,是為獲取結果設立的輔助條件郭变,不會輸出到結果
有 < 代表前斷言颜价,無 < 代表后斷言
= 代表是,! 代表非
最后再加上漏掉的一個 (?: A) 冒號的意思僅僅是不要將此作為分組诉濒。有時候我們會為了用或|
條件而用到分組周伦,但是又不想獲取此分組,便可如此使用
示例:
IP Address
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
Url Pattern:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
Email Pattern:
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
素數(shù) Pattern
^1?$|^(11+)\1+$

Matching an IP address