| 
 
 概念: 
1,  模式匹配:就是检索与指定模式匹配的字符串。java提供了专门进行模式匹配的类,在java.util.regex。 
1)  建立模式对象: 
使用Pattern类创建一个对象,称为模式对象。它调用类方法compile(String pattern)完成这一任务,参数pattern是一个正则表达式,称为模式对象使用的模式。若pattern指定的正则表达式有错,compile方法将抛出异常,PatternSyntaxException。 
Pattern类可以调用类方法compile(String regex,int flag)返回一个pattern对象, 
2)  建立匹配对象 
模式对象调用方法matcher(CharSequence input);返回一个Matcher对象m,称为匹配对象,参数input可以是任何实现了CharSequence接口的类创建的对象。String和StringBuffer类都使用了CharSequence接口。 
Matcher 对象可以使用3个方法寻找参数Input指定的字符序列中是否有与模式pattern匹配的子序列。 
a)       public boolean find();寻找input中第一个与模式pattern匹配的子序列,若find()返回true,m调用start()和end()可以得到该匹配模式子序列在input中的开始位置和结束位置。 
b)      public boolean matches();判断input是否完全与pattern匹配 
c)      public Boolean lookingAt();判断从input开始位置是否有与pattern匹配的子序列。若返回True, m调用start()和end()可以得到lookingAt()方法找到的匹配模式子序列在input中的开始位置和结束位置。 
d)      public Boolean find(int start); 
e)       public string replaceAll(String replacement); 
f)       public String replaceFirst(String replacement); 
  
  
 
  
import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestPattern {    public static void main(String[] args) {       Pattern p ;       Matcher m ;       String s1 = "0A1A2A3A4A5A6A7A8A9";       p = Pattern.compile("\\dA\\d");       m = p.matcher(s1);       System.out.println("matches1:"+m.matches());       while (m.find()) {         String str = m.group();         System.out.println("从"+m.start()+"到"+m.end()+"匹配模式子序列:");         System.out.println(str);       }       String temp = m.replaceAll("***");       System.out.println(temp);       System.out.println(s1);       m = p.matcher("9A0A0A3");       if (m.matches()) {         String str = m.group();         System.out.println(str);         System.out.println("matches:"+m.matches());         System.out.println("find:"+m.find());       }else {         System.out.println("不完全匹配!");       }       if (m.lookingAt()) {         String str = m.group();         System.out.println(str);       }    } } 
  
元字符模式: 
       在正则表达式中可以使用一对方括号扩起来的若干个字符,代表方括号中的任何一个字符。例如pattern=” [123]abc”,那么“1acb”、“2abc”、“3abc”都是与pattern 匹配的字符序列。 
       [abc] 代表abc中任何一个。 
       [^abc] 代表处理abc以外的任何字符。 
       [a-d] 代表a到d 的任何一个。 
       中括号里可以嵌套中括号,可以进行并,交,差运算。 
       [a-d[m-p]]代表a到d,或者M-p中任何字符(并)。 
       [a-z&&[def]]代表d,e,f中任何一个(交)。 
       [a-f&&[^bc]]代表a,d,e,f(差)。 
元字符  | 正则表达式中的写法  | 意义  |  .  | “.”  | 代表任何一个字符  |  \d  | “\\d”  | 0-9任何一个数字  |  \D  | “\\D”  | 任何一个非数字字符  |  \s  | “\s”  | 空格类字符:‘\t’’\n’ ‘\x0B’ ,’\f’,’\r’  |  \S  | “\S”  | 非空格类字符  |  \w  | “\w”  | 可用以标识符的字符(不含$)  |  \W  | “\W”  | 不能用于标识符的字符  |     
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
public class YuanZiFuPattern { 
       public static void main(String[] args) { 
              Pattern p; 
              Matcher m; 
              String s1 = "23&12$A69Q90W"; 
              p = Pattern.compile("[24680][13579]\\w"); 
              m = p.matcher(s1); 
              while (m.find()) { 
                     String str = m.group(); 
                     System.out.println("1:从"+m.start()+"到"+m.end()+"匹配模式子序列"); 
                     System.out.println(str); 
              } 
              String s2 = "as27Aiu86Adfs"; 
              p = Pattern.compile("[1-9&&[^46]A][^234]"); 
              m = p.matcher(s2); 
              while (m.find()) { 
                     String str = m.group(); 
                     System.out.println("2:从"+m.start()+"到"+m.end()+"匹配模式子序列"); 
                     System.out.println(str); 
              } 
       } 
} 
  
模式的逻辑或 
       模式可以使用位运算符“|”进行逻辑或运算,得到一个新模式。 
  
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
public class MoShiHuo { 
       public static void main(String[] args) { 
              Pattern p; 
              Matcher m; 
              String s1 = "loveyouhatemelove123jkjhate999love888"; 
              p = Pattern.compile("love\\w{3}|hate\\w{2}"); 
              m = p.matcher(s1); 
              while (m.find()) { 
                     String str = m.group(); 
                     System.out.println("从"+m.start()+"到"+m.end()+"匹配模式子序列:"); 
                     System.out.println(str); 
              } 
       } 
  
} |