一、 为啥要用正则表达式
正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串校验、拆分、替换功能。
假设: 现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法:
· 不使用正则完成
· 使用正则表达式
1.1 不使用正则表达式完成数字验证
public static void main(String[] args) { String regexStr = "123456789"; boolean flag = true; char[] c = regexStr.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] < '0' || c[i] > 9) { flag = false; break; } } if (flag) { System.out.println("是数字组成"); } else { System.out.println("不是数字组成"); } }
上述程序: 先将字符串拆分,然后一个个进行比较、验证, 但是非常麻烦, 而且现在只是验证是否有数字组成,对于更加复杂的数据,验证会更加复杂。
1.2 使用正则验证
public static void main(String[] args) { String regexStr = "123456789"; if (Pattern.compile("[0-9]+").matcher(regexStr).matches()) { System.out.println("是数字组成"); } else { System.out.println("不是数字组成"); } }以上的正则验证方式也可以很好的校验数据,且更加方便。
二、使用java的正则表达式
2.1 常用的正则规范
· \d : 表示数字,[0-9]
· \D: 表示非数字,[^0-9]
· \w : 表示字母、数字、下划线,[a-zA-Z0-9]
· \W : [^a-zA-Z0-9]
2.2 Java提供的支持正则的API
· Pattern主要是表示一个规则的意思,即: 正则表达式的规则需要在Pattern类中使用。
· Matcher类主要用于使用Pattern制定好的验证规则。
2.3 正则实例;
2.3.1 验证一个字符串是否是合法的日期格式
public static void main(String args[]){ String str = "1983-07-27" ; // 指定好一个日期格式的字符串 String pat = "\\d{4}-\\d{2}-\\d{2}" ; // 指定好正则表达式 Pattern p = Pattern.compile(pat) ; // 实例化Pattern类 Matcher m = p.matcher(str) ; // 实例化Matcher类 if(m.matches()){ // 进行验证的匹配,使用正则 System.out.println("日期格式合法!") ; }else{ System.out.println("日期格式不合法!") ; } }
2.3.2 字符串拆分
public static void main(String args[]){ // 要求将里面的字符取出,也就是说按照数字拆分 String str = "A1B22C333D4444E55555F" ; // 指定好一个字符串 String pat = "\\d+" ; // 指定好正则表达式 Pattern p = Pattern.compile(pat) ; // 实例化Pattern类 String s[] = p.split(str) ; // 执行拆分操作 for(int x=0;x<s.length;x++){ System.out.print(s[x] + "\t") ; } }
2.3.3 字符串替换: 将字符串中全部数字替换成“_”
public static void main(String args[]){ // 要求将里面的字符取出,也就是说按照数字拆分 String str = "A1B22C333D4444E55555F" ; // 指定好一个字符串 String pat = "\\d+" ; // 指定好正则表达式 Pattern p = Pattern.compile(pat) ; // 实例化Pattern类 Matcher m = p.matcher(str) ; // 实例化Matcher类的对象 String newString = m.replaceAll("_") ; System.out.println(newString) ; }
三、String类对正则的支持
String类本身提供了对正则的支持:
3.1 简单的String正则
public static void main(String args[]){ String str1 = "A1B22C333D4444E55555F".replaceAll("\\d+","_") ; boolean temp = "1983-07-27".matches("\\d{4}-\\d{2}-\\d{2}") ; String s[] = "A1B22C333D4444E55555F".split("\\d+") ; System.out.println("字符串替换操作:" + str1) ; System.out.println("字符串验证:" + temp) ; System.out.print("字符串的拆分:") ; for(int x=0;x<s.length;x++){ System.out.print(s[x] + "\t") ; } }
3.2 复杂的数据拆分
public static void main(String args[]){ String info = "LXH:98|MLDN:90|LI:100" ; // 定义一个字符串 // 拆分的形式: /* LXH --> 98 MLDN --> 90 LI --> 100 */ String s[] = info.split("\\|") ; System.out.println("字符串的拆分:") ; for(int x=0;x<s.length;x++){ String s2[] = s[x].split(":") ; System.out.println(s2[0] + "\t" + s2[1]) ; } }
总结:
1. 使用正则可以方便完成字符串的验证、拆分、替换
2. 在开发中可以使用Stirng类提供好的正则支持。
3. 在进行正则验证时,对于一些敏感的字符要进行转义操作。