初识java正则表达式

来源:互联网 发布:大数据职位 编辑:程序博客网 时间:2024/05/01 00:17

1、比较两种代码

(1)不用正则表达式

package com.dengdi.regex;//不用正则表达式public class RegexDemo01 {public static void main(String[] args) {String str="0123456789";boolean flag=false;char[] chars=str.toCharArray();for(int i=0;i<chars.length;i++){if(chars[i]<'1'||chars[i]>'9'){flag=true;break;}}if(flag){System.out.println("不是由数字1~9组成");}else{System.out.println("是由数字1~9组成");}}}
(2)使用正则表达式

package com.dengdi.regex;import java.util.regex.Pattern;public class RegexDemo02 {public static void main(String[] args) {String str="123456789";if(Pattern.compile("[0-9]+").matcher(str).matches()){System.out.println("是由数字组成!");}else{System.out.println("不是由数字组成!");}}}
可以明显看见使用正则表达式的代码量要少些,使用的更方便。

2、介绍正则表达式

使用正则表达式离不开两个类,Pattern类和Matcher类,这里Pattern类主要是进行正则规范(如上面的代码中"[0-9]+"),而Matcher类主要是执行规范,验证字符串是否符合规范,其实从上面代码中也可以看出这两个类是属于java.util.Regex。

Pattern类常用方法(如果要取得Pattern类实例,必须使用compile()方法)

(1)public static Pattern compile(String regex)静态方法指定正则表达式规则并返回Pattern类

(2)public Matcher matcher(CharSequence input)返回Matcher类实例

注意:CharSequence 是个接口  已知所实现类:charBuffer,Segment,String,StringBuffer,StringBuilder

(3)public String[] split(CharSequence input)字符串拆分

Matcher类常用方法

(1)public boolean matches()执行验证

       (2)public String replaceAll(String replacement)字符串替换(所有都替换)


常用正则规范

(1)\\    表示反斜线(\)字符\t    表示制表符

(2)\n   表示换行[abc]    字符a,b或c

(3)[^abc]   表示除了a,b,c之外的任意字符[a-zA-Z0-9]表示由字母、数字组成

(4)\d表示数字\D表示非数字

(5)\w表示字母、数字、下划线\W表示非字母、数字、下划线

(6)\s表示所有空白字符(换行、空格等)\S表示所有非空白字符

(7)^行的开头$ 行的结尾

(8).匹配除换行符之外的任意字符


数量表示(X表示一组规范)

(1)X必须出现一次X?可以出现0次或1次

(2)X*可以出现0次、1次或多次X+可以出现1次或多次

(3)X{n}必须出现n次X{n,}必须出现n次以上X{n,m}必须出现n~m次


逻辑运算符(X,Y表示一组规范)

XYX规范后跟着Y规范X|YX规范或Y规范(X)作为一个捕获组的规范

package com.dengdi.regex;import java.util.regex.Matcher;import java.util.regex.Pattern;//验证一个字符串是否合法public class RegexDemo03 {public static void main(String[] args) {String str="1983-07-27";String regex="\\d{4}-\\d{2}-\\d{2}";//定义验证格式Pattern pattern=Pattern.compile(regex);//实例化Pattern类Matcher matcher=pattern.matcher(str);//验证字符串是否合法if(matcher.matches()){     //使用正则验证System.out.println("格式正确!");}else{System.out.println("格式不正确!");}}}

package com.dengdi.regex;import java.util.regex.Pattern;//按照字符串的数字将字符串拆分public class RegexDemo04 {public static void main(String[] args) {String str="A1B22C333D4444F55555E666666";String regex="\\d+";Pattern pattern=Pattern.compile(regex);String[] strs=pattern.split(str);for(int i=0;i<strs.length;i++){System.out.println(strs[i]);}}}
package com.dengdi.regex;import java.util.regex.Matcher;import java.util.regex.Pattern;//将全部的数字替换成"_"public class RegexDemo05 {public static void main(String[] args) {String str="A1B22C333D4444F55555E666666";String regex="\\d+";Pattern pattern=Pattern.compile(regex);Matcher matcher=pattern.matcher(str);String newStr=matcher.replaceAll("_");//替换数字System.out.println(newStr);}}

3、String类对正则表达式的支持

在String类中有3个方法支持正则表达式

(1)public boolean matches(String regex)字符串匹配

(2)public String replaceAll(String regex,String replacement)字符串替换

(3)public String[] split(String regex)字符串拆分

其实可以看出使用String类的方法比较方便许多

package com.dengdi.regex;public class RegexDemo06 {public static void main(String[] args) {String str="A1B22C333D4444F".replace("\\d+", "_");boolean temp="1996-01-22".matches("\\d{4}-\\d{2}-\\d{2}");String[] strs="A1B22C333D4444F".split("\\d+");System.out.println("字符串替换操作:"+str);System.out.println("字符串验证操作:"+temp);System.out.println("字符串拆分操作:");for(int i=0;i<strs.length;i++){System.out.print(strs[i]+"\t");}}}






0 0
原创粉丝点击