今後對讀懂寫好正則表達式充滿信心

爲何必定要掌握

做爲正則表達式,優點有:正則表達式

  • 簡潔編程

  • 力量強大編程語言

  • 文本處理軍刀工具

一樣,劣勢明顯:url

  • 難讀code

  • 難寫教程

  • 難維護文檔

  • 只在小範圍用效率

那爲何還要它?緣由是:email

  • 你繞不過,代碼裏會遇到它,你須要攻破這一知識點

  • 它老是在撩你

  • 掌握它,收益巨大

它是什麼

  • 文本利器,其餘領域沒有用

  • 能讓你的效率提高的神器

  • 標準混亂,哦不,沒有標準,整體以「Perl風格」爲標準

工欲善其事,必先利其器也

赤手空拳上戰場的士兵是不可理喻的
書籍:

  • <<精通正則表達式>>, 只此一本,今後能上天!(BTW,後面語言相關部分能夠只看本身喜好的語言那裏,其餘可跳過) 拒絕網上的那些不嚴謹,廢話多的,轉述文檔的,或者純粹總結某某書籍的,沒用的垃圾教程 什麼也比不上本身看經典書籍靠譜!

匹配工具,必須能

  • 即時高亮搜索

  • 即時高亮匹配

  • 支持多種語言

  • 主流正則標準支持完備

因此,你須要:

  • 拒絕所謂網頁版; 拒毫不能即時的,高亮的(不是針對誰,只是在座的各位都是...)

  • Sublime,它的搜索框勉強知足上面要求,推薦

  • RegexBuddy(Windows版),神器! 有它,足矣!

我認爲「稱得上重要的」正則語法

心法也
[數量詞/範圍]

  • *: 任意數量

  • +: 許多個(實際上是大於等於1個,可是這樣好記憶)

  • ?: 0或1個

  • .: 一個任意字符(按理來講不歸爲此類,可是我以爲應該這樣)

  • {start,end}: A{1,} A{1,10} A{,10}

  • 上面只有.特殊,既有字符,又有數量

[邏輯]

  • |: 或,只用於元組內

  • ^: 非,只用於字符集內

[相似集合的東東]

  • []: 字符集. 幾點注意:

    • ^的位置,^a-ba^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就好了」

  • 正則雖然難讀難維護,可是如今各語言都支持「正則註釋」, 務必使用

相關文章
相關標籤/搜索