正则表达式笔记 目标:1.掌握正则表达式的作用。 2.掌握正则表达式的匹配模式
3.掌握Patter类和Matcher类的使用 4.掌握String类对正则表达式的支持 一、为什么要有正则表达式?
正则表达式可以方便的对数据进行匹配,可以执行更加复杂项的字符串验证、拆分、替换功能。
例如:现在要求判断一个字符串是否由数字组成,则可以有以下两种做法: 1. 不使用正则完成。 public class RegexDemo01{ public static void main(String args[]){ String str = \ // 此字符串由数字组成 boolean flag = true ; // 定义一个标记变量 // 要先将字符串拆分成字符数组,之后依次判断 char c[] = str.toCharArray() ; // 将字符串变为字符数组 for(int i=0;i
Pattern类,Matcher类:这两个类是正则表达式的核心类。这两个类都定义在java.util.regex包中。
Pattern类定义了一系列使用方法及正则规范。 下表是常用的正则规则: 规范 \\\\ \\n \\t [abc] [^abc] \\d \\w \\s ^ . 描述 表示一个\\ 表示换行 表示制表符 字符a,b或c 除了abc之外的任意字符 表示数字 表示字母数字下划线 表示所有的空白字符 行的开头 表示除换行符之外的任意字符 规范 描述 [a-zA-Z0-9_.] 表示由字母数字组成 \\D \\W \\S $ 表示非数字 表示非字母数字下划线 表示所有非空白字符 行的结尾 详细:
\\d:数字,相当于[0-9] \\D:非数字,相当于[^0-9] \\w字母、数字、下划线,相当于[a-zA-Z0-9_] \\W非字母、数字、下划线,相当于[ ^a-zA-Z0-9_]
表2:正则表达式:数量表示 规范 X X? X+ X* X{n} X{n,m} X{n,} 描述 表示必须出现一次 规范 描述 表示可以出现0次或1次 表示可以出现1次或多次 表示可以出现0次,1次或多次 X必须出现n次 X必须出现n----m次 X必须出现n次以上
以上的正则表达式如果想要驱动起来,则必须使用Pattern类和Matcher类。 Pattern主要是表示规则。即正则表达式的规则需要在Pattern类中使用。 Matcher类主要是执行验证的功能。它主要使用Pattern指定好的验证规则
注意:Pattern类中没有明显的构造方法供用户使用。则肯定此类的构造方法被私有化了。 那么可以直接从Pattern类中取得本类的实例。
上面表中的第一个方法就是通过指定的正则表达式就可以编译生成一个Pattern类的对象。 Pattern类有一个方法,如上表中的第二个方法,这个方法可以实例化Matcher类对象。
思考 :
import java.util.regex.Pattern ; import java.util.regex.Matcher ; public class RegexDemo03{ public static void main(String args[]){ String str = \ // 指定好一个日期格式的字符串 String pat = \// 指定好正则表达式 Pattern p = Pattern.compile(pat) ; // 实例化Pattern类 Matcher m = p.matcher(str) ; // 实例化Matcher类 }; } if(m.matches()){ // 进行验证的匹配,使用正则 System.out.println(\日期格式合法!\}else{ System.out.println(\日期格式不合法!\} 可以通过Pattern实现字符串的拆分功能。 需求:把一个字符串中所有的字母取出来。
import java.util.regex.Pattern ; import java.util.regex.Matcher ; public class RegexDemo04{ public static void main(String args[]){ // 要求将里面的字符取出,也就是说按照数字拆分 String str = \// 指定好一个字符串 String pat = \// 指定好正则表达式 Pattern p = Pattern.compile(pat) ; // 实例化Pattern类 String s[] = p.split(str) ; // 执行拆分操作 for(int x=0;x 在String类中开始直接支持正则表达式的操作。 String类对正则表达式的支持: import java.util.regex.Pattern ; import java.util.regex.Matcher ; public class RegexDemo06{ public static void main(String args[]){ String str1 = \ boolean temp = \ String s[] = \ System.out.println(\字符串替换操作:\ System.out.println(\字符串验证:\ System.out.print(\字符串的拆分:\ for(int x=0;x 在使用正则表达式时,有一点是需要特别注意的:复杂拆分,多次拆分,需要用\\\\转义的字符,比如| import java.util.regex.Pattern ; import java.util.regex.Matcher ; public class RegexDemo07{ public static void main(String args[]){ String info = \ // 拆分的形式: /* LXH --> 98 MLDN --> 90 LI --> 100 */ String s[] = info.split(\ System.out.println(\字符串的拆分:\ for(int x=0;x 使用正则表达式可以完成验证、拆分、替换等复杂的功能。 在开发中一般都会使用String类中已提供好的正则支持。而往往很少直接使用Pattern类或Matcher类。 在正则应用时,注意敏感字的转义操作。