使用正则表达式

正则表达式介绍

    一旦在程序中定义了正则表达式,就可以使用 Pattern 和 Matcher 来使用正则表达式。

    Pattern 对象是正则表达式编译后在内存中的表示形式,因此,正则表达式字符串必须先被编译为 Pattern 对象,然后再利用该 Pattern 对象创建对应的 Matcher 对象。执行匹配所涉及的状态保留在 Matcher 对象中,多个 Matcher 对象可共享同一个 Pattern 对象。

    因此,典型的调用顺序如下:

 Pattern p = Pattern.compile("a*b");
 //使用 Pattern 对象创建 Matcher 对象
 Matcher m = p.matcher("aaaab");
 System.out.println(m.matches());//true
 m = p.matcher("aaaabb");
 System.out.println(m.matches());//false

    boolean b = Pattern.matches("a*b", "aaaaab")// true

    b = Pattern.matches("a*b", "aaaaabb")// false

    采用这种语句每次都要重新编译新的 Pattern 对象,不能重复利用已编译的 Pattern 对象,所以效率不高。

    Pattern 是不可变类,可供多个并发线程安全使用。

    Matcher 类提供了如下几个常用方法。

    find():返回目标字段中是否包含与 Pattern 匹配的子串。

    group():返回上一次与 Pattern 匹配的子串。

    start():返回上一次与 Pattern 匹配的子串在目标字符串中的开始位置。

    end():返回上一次与 Pattern 匹配的子串在目标字符串中的结束位置加 1。

    lookingAt():返回目标字符串前面部分与 Pattern 是否匹配。

    matches():返回整个目标字符串与 Pattern 是否匹配。

    reset(),将现有的 Matcher 对象应用于一个新的字符序列。

    

public static void main(String[] arg){
		String str = "你好,今天还有一个3个客户没有进行电话回访,分别是:" +
		"李先生:13212345678,王先生:13212345679,杨先生:155123456789";
		
		//使用 Pattern 对象创建 Matcher 对象
		Matcher m = Pattern.compile("(13\\d)\\d{8}")
			.matcher(str);
		//将符合正则表达式的子串输出
		while(m.find()){
			System.out.println("子串:" + m.group());
			System.out.println("子串的开始位置:" + m.start());
			System.out.println("子串的结束的位置:" + m.end());
			
		}
				
	}
输出结果:
子串:13212345678
子串的开始位置:30
子串的结束的位置:41
子串:13212345679
子串的开始位置:46
子串的结束的位置:57
    matches() 和 lookingAt() 方法有点相似,只是 matches() 方法要求整个字符串和 Pattern 完全匹配时才返回 true,而 lookingAt() 只要字符串以 Pattern 开头就会返回 true。resent() 方法可将现有的 Matcher 对象应用于新的字符序列。
public static void main(String[] arg){
		String[] strs = {"abc", "abcdef", "def"};
		String regular = "[a-c]+";
		Pattern p = Pattern.compile(regular);
		Matcher matcher = null;
		for(String r : strs){
			if(matcher == null){
				matcher = p.matcher(r);
			}else{
				matcher.reset(r);
			}
			System.out.println(r + "__matches()__" + matcher.matches());
			System.out.println(r + "__lookingAt()__" + matcher.lookingAt());
		}
				
	}
输出结果
abc__matches()__true
abc__lookingAt()__true
abcdef__matches()__false
abcdef__lookingAt()__true
def__matches()__false
def__lookingAt()__false

    String 类里面也提供了 matches()方法,该方法返回该字符串是否匹配指定的正则表达式。例如: 

    "abc".matches("[a-c]+"); //true

    除此之外,还可利用正则表达式对目标字符串进行分割、查找、替换等操作。如:

	public static void main(String[] arg){
		String[] strs = {"abc h_h", "abc def h_h", "def h_h"};
		String regular = "([a-c]+|[d-f]+)";
		Pattern p = Pattern.compile(regular);
		Matcher matcher = null;
		for(String r : strs){
			if(matcher == null){
				matcher = p.matcher(r);
			}else{
				matcher.reset(r);
			}
			System.out.println(matcher.replaceAll("regular"));
		}
				
	}
输出结果
regular h_h
regular regular h_h
regular h_h





猜你喜欢

转载自blog.csdn.net/ff_hh/article/details/80097288