版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/1541912
JDK6筆記(3)----正規表達式
一、正規表達式的編譯形式
1)指定為字元串的正規表達式必須首先被編譯為此類的執行個體。compile
2)将得到的模式用于建立Matcher對象。matcher
3)依照正規表達式,該對象可以于任意字元序列比對。matches
例:
Pattern p=Pattern.compile("a*b");
Matcher m=P.matcher("aaaaab");
boolean b=m.matches();
二、規則
1)字元類
. 表示任何字元
[abc] 包含a、b、c的任何字元 (和a|b|c相同)
[^abc] 除a、b、c之外的任何字元 (否定)
[a-zA-Z] 任何從a到z或從A到Z的字元 (範圍)
[abc[hij]] 任意a、b、c、h、i、j字元 (與a|b|c|h|i|j相同)(合并)
[a-z&&[hij]] 任意h、i、j字元 (交)
/s whitespace符 (空格、tab、換行、換頁、回車)
/S 非whitespace符 ([^/s])
/d 數字[0-9]
/D 非數字[^0-9]
/w word character ([a-zA-Z_[0-9])
/W 非word character (^/w)
2)在Java中,“//”意味着正在插入一個正規表達式的反斜杠,随後的字元具有特殊意義。
XY XY
X|Y X或Y
(X) Capturing group
3)邊界比對
^ 一行的開始
$ 一行的結束
/b 詞界
/B 非詞界
/G 上一級的結尾
4)量詞
? 0或1個
* 0或多個
+ 1或多個
X{n} X,恰好n次
X{n,} X,至少n次
X{n,m} X,至少n次,至多m次
三、字元序列
CharSequence接口,從String到StringBuffer類中抽象出。
interface CharSequence{
charAt(int i); //傳回指定索引處的char值
length(); //傳回長度
subSequence(int start,int end); //傳回從索引start開始,end結束的子序列
toString(); //傳回字元串
}
四、在Java中,正規表達式是通過java.util.regex包裡面的Pattern和Matcher類來實作的。
1)Matcher.find()用于發現應用于CharSequence的多重模式比對。
2)find(int start) 重置此比對器,然後嘗試查找比對該模式、從指定索引開始的輸入序列的下一個子序列。
package myfile;
import java.util.regex.*;
import java.util.*;
public class FindDemo {
private static String str="boolean contains(CharSequence s) new Test()";
public static void main(String[] args) {
Matcher m=Pattern.compile("
//w+").matcher("Eveningis full of the linnet's wings");
while(m.find())
System.out.println(m.group());
int i=0;
while(m.find(i)){
i++;
System.out.print(m.group()+" ");
}
System.out.println("/n"+"i="+i);
}