【Java常用类库】_正则表达式笔记
发布时间:2020-12-14 02:28:08 所属栏目:百科 来源:网络整理
导读:【Java常用类库】_正则表达式笔记 本章目标: 掌握正则表达式的作用 掌握正则表达式的匹配模式 掌握Pattern类和Matcher类的使用 掌握String对正则的支持 例如:现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法: 1.不使用正则; 2.使用正则; 实
【Java常用类库】_正则表达式笔记
本章目标: 掌握正则表达式的作用 掌握正则表达式的匹配模式 掌握Pattern类和Matcher类的使用 掌握String对正则的支持 例如:现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法: 1.不使用正则; 2.使用正则; 实例一: public class RegexDemo01{ public static void main(String[] args){ String str = "1234567890"; //此字符串由数字组成 boolean flag = true; //定义一个标识变量 char[] c = str.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("不是由数字组成!"); } } } 实例二: import java.util.regex.Pattern; public class RegexDemo02{ public static void main(String[] args){ String str = "13456789"; //此字符串由数字组成 if(Pattern.compile("[0-9]+").matcher(str).matches()){ System.out.println("是由数字组成!"); }else{ System.out.println("不是由数字组成!"); } } } 可以发现使用正则操作代码更加简单。 3.2、Pattern、Matcher类 这两个类都定义在java.util.regex包中 Pattern类的主要作用是进行正则规范(如之前的“[0-9]”就属于正则规范) 而Matcher类主要是执行规范,验证一个字符串是否符合其规范。 常用正则规则一: No 规范 描述 1 表示反斜线()字符 2 t 表示制表符 3 n 表示换行 4 [abc] 字符a、b或c 5 [^abc] 除a、b、c之外的任一字符 6 [a-zA-Z0-9] 表示由数字、字母组成 7 d 表示数字 8 D 表示非数字 9 w 表示数字、字母、下划线 10 W 表示非数字、字母、下划线 11 s 表示所有空白字符(换行、空格等) 12 S 表示所有非空白字符 13 ^ 行的开头 14 $ 行的结尾 15 . 匹配除换行外的任意一个字符 d:表示数字,[0-9] D:表示非数字,[^0-9] w:表示字母、数字、下划线,[a-zA-Z0-9] W:[^a-zA-Z0-9] 常用正则规则二: 数量表示(X表示一组规范) No 规范 描述 1 X 必须出现一次 2 X? 可以出现0次或1次 3 X* 可以出现0次或多次 4 X+ 可以出现一次或多次 5 X{n} 可以出现N次 6 X{n,} 可以出现N次以上 7 X{n,m} 必须出现n次到m次 逻辑运算符(X、Y表示一组规范) No 规范 描述 1 XY X规范后跟着Y规范 2 X|Y X规范或Y规范 3 (X) 做为一个捕捉组规范 以下的正则,如果要想驱动起来,则必须依靠Pattern或Matcher类。 Pattern主要是表示一个规则的意思,即:正则表达式的规则需要在Pattern类中使用。 Matcher类主要表示使用Pattern指定好的验证规则。 Pattern类的常用方法 No 方法 类型 描述 1 public static Pattern compile(String regex) 普通 指定正则表达式规则 2 public Matcher matcher(CharSequence input) 普通 返回Matcher类实例 3 public String[] split(CharSequence input) 普通 字符串拆分 在Pattern类中如果要想取得Pattern类实例,则必须调用compile()方法。 本类中没有明确的构造方法可以供用户使用,那么肯定此类的构造方法被私有化了,则可以直接从Pattern类中取得本类的实例。 指定好操作的正则:public static Pattern compile(String regex) 可以为matcher类实例化:public Matcher matcher(CharSequence input) 拆分:public String[] split(CharSequence input) 回顾:String 中也存在拆分操作。 Matcher类的常用方法: 如果要验证一个字符串是否符合规范,则可以使用Matcher类 No 方法 类型 描述 1 public boolean matches 普通 执行验证 2 public String replaceAll(String replacement) 普通 字符串替换 实例二:验证一个字符串是否是合法的日期格式 import java.util.regex.Pattern; import java.util.regex.Matcher; public class RegexDemo03{ 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("日期格式不合法!"); } } } 在Pattern类中也可以使用正则进行字符串的拆分功能。 import java.util.regex.Pattern; import java.util.regex.Matcher; public class RegexDemo04{ public static void main(String args[]){ String str = "A1B22C333D444E55555F"; String pat = "d+"; //指定好正则表达式 Pattern p = Pattern.compile(pat); String s[] = p.split(str); //执行拆分操作 for(int x=0;x<s.length;x++){ System.out.println(s[x]+"t"); } } } 还可以使用Matcher类中的替换功能。 范例:将字符串中的全部数字替换成“_” import java.util.regex.Pattern; import java.util.regex.Matcher; public class RegexDemo05{ public static void main(String args[]){ String str = "A1B22C333D444E55555F"; String pat = "d+"; //指定好正则表达式 Pattern p = Pattern.compile(pat); Matcher m = p.matcher(str); String newString = m.replaceAll("_"); System.out.println(newString); } } 只要使用正则的验证的规则,那么就可以匹配各种复杂的字符串。 3.3、String 类对正则的支持 从之前的操作中,可以发现,很多的代码除了要求的字符串不同,使用的正则规则不同,基本上就没有什么特别的了。 所以在JDK1.4之后,java对正则进行了一些扩充,在String 中开始直接支持正则的操作。 String 对正则表达式的支持 在String 类中有以下三个方法是支持正则操作的。 No. 方法 类型 描述 1 public boolean matches(String regex) 普通 字符串匹配 2 public String replaceAll(String regex,String replacement) 普通 字符串替换 3 public String[] split(String regex) 普通 字符串拆分 import java.util.regex.Pattern; import java.util.regex.Matcher; public class RegexDemo06{ public static void main(String[] args){ String str = "A1B22C333D444E55555F".replaceAll("d+","_"); boolean temp = "1982-07-27".matches("d{4}-d{2}-d{2}"); String s[] = "A1B22C333D444E55555F".split("d+"); System.out.println("字符串替换操作:"+str); System.out.println("字符串验证:"+temp); System.out.println("字符串的拆分:"); for(int x=0;x<s.length;x++){ System.out.println(s[x]+"t"); } } } 但是,在使用正则的时候有一点是需要特别注意的。 现在,假设有如下一个字符串的拆分程序。 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<s.length;x++){ String s2[] = s[x].split(":"); System.out.println(s2[0]+"t"+s2[1]); } } }如果有时候发现一个字符串无法按照指定的字符拆分的话,则需要使用""转义,转义的时候两个""表示一个""。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |