天天看点

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

}