Java Regular Expressions

使用正则表达式可以方便地对数据进行匹配,还可以 执行更加复杂的字符串验证、拆分、替换功能。

示例程序RegexDemo01.java判断一个字符串是否由数字组成(不使用正则表达式)

package com.fairy.regex;

public class RegexDemo01 {
	public static void main(String[] args) {
		String str = "1234567890";
		boolean flag = true;
		char[] ch = str.toCharArray();

		for (char c : ch) {
			if (c < '0' || c > '9') {
				flag = false;
				break;
			}
		}

		if (flag) {
			System.out.println("是由数字组成!");
		} else {
			System.out.println("不是由数字组成!");
		}
	}
}

 

示例程序RegexDemo02.java,判断一个字符串是否由数字组成(使用正则表达式)

package com.fairy.regex;

import java.util.regex.Pattern;

public class RegexDemo02 {
	public static void main(String[] args) {
		String str = "1234567890";

		if (Pattern.compile("\\d+").matcher(str).matches()) {
			System.out.println("是由数字组成!");
		} else {
			System.out.println("不是由数字组成!");
		}
	}
}

 

以上两段代码完成了同样的功能,但是代码2的长度明显比代码1短很多。实际上具体的正则表达式操作类是需要通过Pattern和Matcher两个类完成操作的。如果要在程序中应用正则表达式则必须依靠Pattern类与Matcher类,这两个类都在java.util.regex包中定义。Pattern类的主要作用是进行正则规范的编写,而Matcher类主要是执行规范,验证一个字符串是否符合其规范。

常用的正则规范的定义如下表所示

Java Regular Expressions_第1张图片
 数量表示(X表示一组规范)定义如下表所示

Java Regular Expressions_第2张图片
 逻辑运算符(X、Y表示一组规范)定义如下表所示


 在Pattern类中直接使用上述三张表中的正则规则则即可完成相应的操作,Pattern类的常用方法如下表所示

Java Regular Expressions_第3张图片

在Pattern类中如果要取得Pattern类实例,则必须调用compile()方法。

如果要验证一个字符串是否符合规范,则可以使用Matcher类,Matcher类的常用方法如下表所示。


 示例程序RegexDemo03.java,验证一个字符串是否是合法的日期格式

package com.fairy.regex;

import java.util.regex.Pattern;

public class RegexDemo03 {
	public static void main(String[] args) {
		String str = "2012-12-21";
		String pat = "\\d{4}-\\d{2}-\\d{2}";

		if (Pattern.compile(pat).matcher(str).matches()) {
			System.out.println("日期格式合法!");
		} else {
			System.out.println("日期格式不合法!");
		}
	}
}

 在程序中"\"字符是需要进行转义的,两个  "\"实际上表示的是一个"\",所以实际上"\\d"表示的是"\d"。

 

示例程序RegexDemo04.java,按照字符串的数字将字符串拆分

package com.fairy.regex;

import java.util.regex.Pattern;

public class RegexDemo04 {
	public static void main(String[] args) {
		String str = "A1B22C333D4444E55555F";
		String pat = "\\d+";

		String[] strings = Pattern.compile(pat).split(str);

		for (String s : strings) {
			System.out.print(s + "\t");
		}
	}
}

 

示例程序RegexDemo05.java,将全部的数字替换成“_”

package com.fairy.regex;

import java.util.regex.Pattern;

public class RegexDemo05 {
	public static void main(String[] args) {
		String str = "A1B22C333D4444E55555F";
		String pat = "\\d+";

		String newStr = Pattern.compile(pat).matcher(str).replaceAll("_");
		
		System.out.println(newStr);
	}
}
 

String类对正则表达式的支持

在String类中有3个方法支持正则操作,如下标所示。

Java Regular Expressions_第4张图片

示例程序RegexDemo06.java,使用String修改之前操作

package com.fairy.regex;

public class RegexDemo06 {
	public static void main(String[] args) {
		String str1 = "A1B22C333D4444E55555F".replaceAll("\\d+", "_");

		boolean temp = "2012-12-21".matches("\\d{4}-\\d{2}-\\d{2}");

		String[] strings = "A1B22C333D4444E55555F".split("\\d+");

		System.out.println(str1);
		System.out.println(temp);

		for (String s : strings) {
			System.out.print(s + "\t");
		}
	}
}

 

示例程序RegexDemo07.java,对于一些敏感字符操作时需要转义

package com.fairy.regex;

public class RegexDemo07 {
	public static void main(String[] args) {
		String info = "JSP+Servlet+JDBC|Struts+Spring+Hibernate|JSF+EJB+JPA";
		String[] strings = info.split("\\|");

		for (String s : strings) {
			String[] string2 = s.split("\\+");

			System.out.println(string2[0] + "\t" + string2[1] + "\t"
					+ string2[2]);
		}
	}
}

 在正则操作中,如果发现某些字符无法直接使用,则最好将其进行转义处理。

你可能感兴趣的:(Java Regular Expressions)