使用正则表达式可以方便地对数据进行匹配,还可以 执行更加复杂的字符串验证、拆分、替换功能。
示例程序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类主要是执行规范,验证一个字符串是否符合其规范。
常用的正则规范的定义如下表所示
数量表示(X表示一组规范)定义如下表所示
逻辑运算符(X、Y表示一组规范)定义如下表所示
在Pattern类中直接使用上述三张表中的正则规则则即可完成相应的操作,Pattern类的常用方法如下表所示
在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个方法支持正则操作,如下标所示。
示例程序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]);
}
}
}
在正则操作中,如果发现某些字符无法直接使用,则最好将其进行转义处理。