天天看點

JDK6筆記(3)----正規表達式

版權聲明:本文為部落客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("Evening

is 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);

}