正規表達式是程式員非常常用的工具,利用它對資料進行查找和抽取非常高效和友善,是以很有必要對其有較為深入的了解。
正則使用的時候一定要注意他的自動機特性,具體來說就是每個節點隻會關注他下一個輸入讓他達到的狀态。有個比較經典的trap,用正則a*?b去比對aab,粗看一下肯定以為比對結果會是ab,其實不然。他先去比對第一個a,然後去判斷下一個是不是b,如果不是,那麼再看是不是還是a,是以結果是aab。
另外使用的時候有幾個經驗:
1. 對任意字元進行比對,可以使用[\s\S],這個是比較常用的習慣,雖然你還能寫出很多其他一樣功能的正則。
2. 利用環視來檢視比對結果的前後特征。這個在抽取且不用group的時候會經常用到,這個最好是要知道怎麼用。
3. 去除不需要的group。這個經常會在寫取固定的group值的時候會遇到這個麻煩,前面有個比對不得不用到括号,這樣會比預期多出來一個group,那麼可以使用(?:xxx)來聲明這個括号不是一個group。
4. 性能問題。其實我個人并不太關注正規表達式的優化,但是有一點是必須要注意的,就是不要使用貪婪的嵌套,這個性能是很低的。
5. 用使用正則一樣的環境來驗證正則,比如java的程式需要調用正則,用寫個java測試程式來驗證。我做過一個簡單java正則驗證的GUI工具,用了很多年還挺順手的,放到附件中給大家分享一下吧。
總的來說,使用正則不要硬搬,關鍵是掌握原理、靈活運用。希望大家都能把正則用的得心應手。
本文轉自passover 51CTO部落格,原文連結:http://blog.51cto.com/passover/524268,如需轉載請自行聯系原作者