正則表達式
在了解正則表達式之前,我們先看幾個非常常見的問題:
一種直觀的想法是通過程序判斷,這種方法需要為每種用例創(chuàng)建規(guī)則,然后用代碼實現(xiàn)。下面是判斷手機號的代碼:
上述代碼僅僅做了非常粗略的判斷,并未考慮首位數(shù)字不能為0
等更詳細的情況。除了判斷手機號,我們還需要判斷電子郵件地址、電話、郵編等等。為每一種判斷邏輯編寫代碼實在是太繁瑣了。有沒有更簡單的方法?
有!用正則表達式!
正則表達式可以用字符串來描述規(guī)則,并用來匹配字符串。一個正則表達式一個描述規(guī)則的字符串,所以,只需要編寫正確的規(guī)則,就可以讓正則表達式引擎去判斷目標(biāo)字符串是否符合規(guī)則,以下代碼是 Java 中正則表達式的使用方法示例。
① 精確匹配
正則表達式的匹配規(guī)則是從左到右按規(guī)則匹配。首先來看如何使用正則表達式來做精確匹配。

② 單字符匹配
匹配任意字符:.
匹配一個任意字符。
匹配數(shù)字:如果我們只想匹配0
~9
這樣的數(shù)字,可以用\d
匹配。
匹配非數(shù)字:用\d
可以匹配一個數(shù)字,而\D
則匹配一個非數(shù)字。
匹配常用字符:用\w
可以匹配一個字母、數(shù)字或下劃線,w的意思是word。
匹配空格字符:用\s
可以匹配一個空格字符,注意空格字符不但包括空格,還包括tab字符(在Java中用\t
表示)。

至少一個字符:修飾符+
可以匹配至少一個字符。
0個或一個字符:修飾符?
可以匹配0個或一個字符。
匹配指定數(shù)量:如果我們想精確指定n個字符怎么辦?用修飾符{n}
就可以。
匹配指定區(qū)間數(shù)量:如果我們想指定匹配n~m個字符怎么辦?用修飾符{n,m}
就可以。

① 匹配開頭和結(jié)尾
② 匹配指定范圍
如果我們規(guī)定一個7~8位數(shù)字的電話號碼不能以0
開頭,應(yīng)該怎么寫匹配規(guī)則呢?\d{7,8}
是不行的,因為第一個\d
可以匹配到0
。
[...] 可以匹配范圍內(nèi)的字符
③ 或規(guī)則匹配
用|
連接的兩個正則規(guī)則是或規(guī)則
④ 使用括號
現(xiàn)在我們想要匹配字符串?learn java
、learn php?
和?learn go
怎么辦?一個最簡單的規(guī)則是
earn\sjava|learn\sphp|learn\sgo,但是這個規(guī)則太復(fù)雜了,可以把公共部分提出來,然后用(...)
把子規(guī)則括起來表示成learn\s(java|php|go)
。
