做爲正則表達式,優點有:正則表達式
簡潔編程
力量強大編程語言
文本處理軍刀工具
一樣,劣勢明顯:url
難讀code
難寫教程
難維護文檔
只在小範圍用效率
那爲何還要它?緣由是:email
你繞不過,代碼裏會遇到它,你須要攻破這一知識點
它老是在撩你
掌握它,收益巨大
文本利器,其餘領域沒有用
能讓你的效率提高的神器
標準混亂,哦不,沒有標準,整體以「Perl風格」爲標準
赤手空拳上戰場的士兵是不可理喻的
書籍:
<<精通正則表達式>>
, 只此一本,今後能上天!(BTW,後面語言相關部分能夠只看本身喜好的語言那裏,其餘可跳過) 拒絕網上的那些不嚴謹,廢話多的,轉述文檔的,或者純粹總結某某書籍的,沒用的垃圾教程
什麼也比不上本身看經典書籍靠譜!
匹配工具,必須能
即時高亮搜索
即時高亮匹配
支持多種語言
主流正則標準支持完備
因此,你須要:
拒絕所謂網頁版; 拒毫不能即時的,高亮的
(不是針對誰,只是在座的各位都是...
)
Sublime
,它的搜索框勉強知足上面要求,推薦
RegexBuddy
(Windows版),神器! 有它,足矣!
心法也
[數量詞/範圍]
*
: 任意數量
+
: 許多個(實際上是大於等於1個,可是這樣好記憶)
?
: 0或1個
.
: 一個任意字符(按理來講不歸爲此類,可是我以爲應該這樣)
{start,end}
: A{1,} A{1,10} A{,10}
上面只有.
特殊,既有字符,又有數量
[邏輯]
|
: 或,只用於元組內
^
: 非,只用於字符集內
[相似集合的東東]
[]
: 字符集. 幾點注意
:
^
的位置,^a-b
與a^b
能理解嗎
-
的位置,a-z
與-az
意思徹底不一樣
()
: 元組, (A|B|C|D)
能理解嗎
[殺器功能]
環視,或者說錨點
,自己不匹配任何字符,只標記一個地方
約定的
: ^
$
正向確定
: (?=...)
正向否認: (?<=...)
逆向確定
: (?!...)
逆向否認: (?<!...)
以上,只要兩個就夠了!由於: 否認就是確定,否認用^符號輔助不就好了?
又丟掉一點點心智負擔
元組命名
,好用且有用,各家編程語言不一樣,有的還不支持,下面以Python爲例
(?P<name>...)
: 唔...,還挺漂亮的
後向引用
, 就是用前面已經匹配的內容,這時正好用到上面元組命名
功能,總得知道前面已經匹配的一坨東西是啥吧,以Python爲例
(?=...)
[所謂約定俗成的,看起來重要的字符集]
無非是\w
,\d
這些啦,這些字符集都不是重要的,無非是爲了方便. 這些字符集要隨時可以在本身的腦海中組裝起來.
幾個重要的
\w
: [a-zA-Z_]
\b
: ((?<!\w)(?=\w)|(?!\w)(?=\w))
[其餘]都是各家語言提供的方言功能了吧,可能,不學也罷
與之相關的工具: grep
,awk
等,各編程語言的正則庫
,其中編程語言正則庫最重要(它是你的生產力所在),必須通讀其文檔,才能心中有正氣
經常使用的正則,至少看懂.如匹配url,email等
(大部分狀況都是須要看懂正則
)
謹記: 面對實際需求,絕對正確的正則,可能根本寫不出來,這時候「90%的狀況能work就好了」
正則雖然難讀難維護,可是如今各語言都支持「正則註釋」, 務必使用