從此對讀懂寫好正則表達式充滿信心

為什么一定要掌握

作為正則表達式,優勢有:

  • 簡潔
  • 力量強大
  • 文本處理軍刀

同樣,劣勢明顯:

  • 難讀
  • 難寫
  • 難維護
  • 只在小范圍用

那為什么還要它?原因是:

  • 你繞不過,代碼里會遇到它,你需要攻破這一知識點
  • 它總是在撩你
  • 掌握它,收益巨大

它是什么

  • 文本利器,其他領域沒有用
  • 能讓你的效率提升的神器
  • 標準混亂,哦不,沒有標準,總體以「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等,各語言的正則庫,其中語言正則庫最重要,必須通讀其文檔,才能心中有正氣
  • 平時有事沒事粘貼東西到Sublime中,搜索/替換(不管是實際需求,還是自己捏造的)
  • 常用的正則,至少看懂.如匹配url,email等
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容