在對字符串進行處理時一方面可以利用String對象的一些處理方法另一方面可以利用正則表達式,但是一般情況下用String對象方法進行處理起來會相對麻煩一些而正則表達式可以很方便的解決問題。爲了更好的學習正則表達式,本文將講述正則表達式的相關應用。
正則表達式
概念:用於專門操作字符串
好處:可以簡化對字符串的複雜操作
特點:用於一些特定的符號來表示一些代碼操作,這樣就簡化書寫
弊端:符合定義越多,正則越長,閱讀性越差
注意:
1.用規則匹配整個字符串,只要有一處不符合規則,就匹配結束,返回false
2.正則表達式中反斜線成對出現
字符類
[abc] a、b 或 c(簡單類) 只能是abc中的一個
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](並集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
預定義字符類
. 任何字符(與行結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\D 非數字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]
數量詞
X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過 m 次
邊界匹配器
^ 行的開頭
$ 行的結尾
\b 單詞邊界
\B 非單詞邊界
\A 輸入的開頭
\G 上一個匹配的結尾
\Z 輸入的結尾,僅用於最後的結束符(如果有的話)
\z 輸入的結尾
\\d? 表示一個數字或者沒有數字
組
爲了可以讓規則的結果被重用,可以將規則封裝成一個組。用()完成,組的出現都有編號,從1開始,想要使用一樣的組可以通過\n(n就是組的編號)的形式來獲取 有幾個組括號就有幾組。
正則中的方法
1,匹配:String matches方法。用規則匹配整個字符串,只要有一處不符合規則,就匹配結束,返回false。
matches(String regex)
告知此字符串是否匹配給定的正則表達式。
2,切割:String split();
split(String regex, int limit)
根據匹配給定的正則表達式來拆分此字符串。
3,替換:String replaceAll(regex,str);如果regex中有定義組,可以在第二參數中通過$符號獲取正則表達式中的已有的組
replaceAll(String regex, String replacement)
使用給定的 replacement 替換此字符串所有匹配給定的正則表達式的子字符串。
4,獲取:將字符串中的符合規則的子串取出
方法
1,將正則表達式封裝成對象。
Pattern p = Pattern.compile(reg);
compile(String regex)
將給定的正則表達式編譯到模式中。
2,讓正則對象和要操作的字符串相關聯。
Matcher m = p.matcher(str);
matcher(CharSequence input)
創建匹配給定輸入與此模式的匹配器。
3,關聯後,獲取正則匹配引擎。
4,通過引擎對符合規則的子串進行操作,比如取出
while(m.find())
{
System. out.println(m.group());
System. out.println(m.start()+"...." +m.end());
}