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