更新時間:2020-03-11 10:06:47 來源:動力節點 瀏覽2677次
正則表達式
正則表達式大家應該都不陌生,我今天從零開始介紹我自己的學習經驗和步驟!
字符組
在一對方括號[和]之間列出所有可能出現的字符,包括可見以及不可見的字符;例如:
[123]
表示可以匹配1、2、3的單個字符。
1字符組的范圍表示
如果可以匹配的字符有規律性并且范圍比較大,比如0、1、2、3、4、5、6、7、8、9,表達式寫成
[0123456789]
這樣就顯得復雜也不美觀,所以引入符號"-",使用[x-y]的形式表示在閉區間x到y范圍內的字符,上式可以寫成
[0-9]
【注意】:-范圍表示法必須遵循ASCII編碼的先后順序,即上式不可寫作[9-0],而一些令人困惑的表達式也盡量不要使用,比如[0-z]因為該式涵蓋了在ASCII編碼表中從0到z的全部字符(不僅僅只有數字和小寫字母)。如果想要表示多個范圍,比如匹配數字、大寫字母和小寫字母,表達式可以寫作
[0-9a-zA-Z]
2元字符與轉義
在表達式中有特殊功能而不作為字符的一部分字符,稱為元字符。比如前文講過的:[]-都是元字符,如果想要恢復它們本來的字符屬性就要做一些特殊處理。先看一般情況,取消元字符特殊含義的操作叫做轉義,操作是在表達式中的元字符前加反斜杠。特殊情況就是表示范圍的橫線-,當其緊鄰左方括號[時就作為普通字符處理,其他情況都作為元字符表示范圍。
【注意】
1、橫線-也支持反斜杠的轉義,即[0-9]表示0、-、9三個字符。
2、右方括號]不需要轉義。
3排除型字符組
當需要表示的字符組范圍很大,寫起來不方便,而恰巧它的補集(全集指所有字符)方便表示,引出了排除型字符組[^…],表示在當前位置匹配一個沒有列出的字符,請注意是"必須匹配一個沒有出現的字符",而不是"不要匹配列出的字符"。例如:
[^0-9][^0-9]
可以匹配"QQ",但不可以匹配"Q"。
【注意】緊跟在^之后的-不是一個元字符!而^自身也是元字符,當且僅當^緊跟[時,否則表示它作為字符的含義。
4字符組簡記法
常見的字符組簡記法有\d([0-9])、\w([0-9a-zA-Z_])、\s([\t\r\n\v\f])
【注意】w可以匹配下劃線,不等價于[0-9a-zA-Z]。另外字符組簡記法可以單獨出現,也可以使用在字符組中,如
`[0-9a-zA-Z]`可以寫成`[\da-zA-Z]`
正則表達式也提供了上面三種常用簡記法的排除型:\D、\W、\S,這三種分別對應各自的補集(全集是指所有字符,即[dD]可以匹配任意字符,剩余二者同理)。
【再次注意】第一,使用字符組簡記法最好不要出現單獨的-;第二,上面描述的簡記法都是針對ASCII編碼而言的;第三,字符組簡記法不止這三種,還有其他(也可能根據不同的編程語言衍生出新的簡記法),等遇到了再說。
5字符組的運算
當我們所研究的問題要求我們的全集不是所有字符,排除型字符組就顯得不是那么的好用了。比如我需要匹配字母表第1、5、9個小寫字母,把所有字符看作全集顯然不合適,而把所有小寫字母看作全集就比較合適,但是寫成[b-df-hj-z]就比較復雜而且容易搞錯,Java就允許使用邏輯與(&&,也可以理解為取交集)來解決這個問題,即寫成:
[a-z]&&[^aei]
以上就是動力節點Java培訓機構小編介紹的“Java基礎學習:Java正則表達式教程”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習