Pattern和Matcher的结合使用


Pattern和Matcher

java.lang.Object
————java.util.regex.Pattern
public final class Patterne xtends Object implements Serializable


正则表达式的编译表示形式。 


因此,典型的调用顺序是 
 Pattern p = Pattern.compile("a*b"); //获取到正则表达式
 		指定为字符串的正则表达式必须首先被编译为Pattern类的实例。
 Matcher m = p.matcher("aaaaab");	//获取匹配器
 		然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。
 boolean b = m.matches();			//看是否能匹配,匹配就返回true
 		执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。 

System.out.println("aaaaab".matches("a*b")); //与上面的结果一样


 在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。
 语句  boolean b = Pattern.matches("a*b", "aaaaab");
 等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。 
此类的实例是不可变的,可供多个并发线程安全使用。Matcher 类的实例用于此目的则不安全。 
 语句  boolean b = Pattern.matches("a*b", "aaaaab");
 等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。 
此类的实例是不可变的,可供多个并发线程安全使用。Matcher 类的实例用于此目的则不安全。 


public static Pattern compile(String regex)
	将给定的正则表达式编译到模式中。


public static boolean matches(String regex,CharSequence input)
	编译给定正则表达式并尝试将给定输入与其匹配。 
	调用此便捷方法的形式 
		Pattern.matches(regex, input);与表达式 
		Pattern.compile(regex).matcher(input).matches() 的行为完全相同。 
		如果要多次使用一种模式,编译一次后重用此模式比每次都调用此方法效率更高。
	参数:
	regex - 要编译的表达式
	input - 要匹配的字符序列 

Pattern和Matcher的结合使用

把一个字符串中的手机号码获取出来

public class b {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s = "我的手机是13468847456,他的手机号15289236924";
		String regex = "1[3578]\\d{9}";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(s);
		boolean b = m.matches();
		System.out.println(b);//false
		
	/*	public boolean find()
	 * 		尝试查找与该模式匹配的输入序列的下一个子序列。 
		此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,
		则从以前匹配操作没有匹配的第一个字符开始。 
		如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
			返回:
			当且仅当输入序列的子序列匹配此匹配器的模式时才返回 true。*/
		
		//boolean b1 = m.find();
		//System.out.println(b1);//true
		
		/*public String group()
		 * 		返回由以前匹配操作所匹配的输入子序列。 
			对于具有输入序列 s 的匹配器 m,表达式 m.group() 和 s.substring(m.start(), m.end()) 是等效的。 
			注意,某些模式(例如,a*)匹配空字符串。当模式成功匹配输入中的空字符串时,此方法将返回空字符串。 
			返回:
			以前匹配操作所匹配的字符串形式的子序列(可能为空)。 */
		
		//System.out.println(m.group());//13468847456
		
		/*while(m.find())
			System.out.println(m.group());*/
		/*13468847456
		15289236924*/
	}

}



你可能感兴趣的:(Java)