java正则表达式.docx
- 文档编号:9624058
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:9
- 大小:170.54KB
java正则表达式.docx
《java正则表达式.docx》由会员分享,可在线阅读,更多相关《java正则表达式.docx(9页珍藏版)》请在冰豆网上搜索。
java正则表达式
正则表达式笔记
分两部分:
1.怎么写正则表达式2.怎么用正则表达式
目标:
1.掌握正则表达式的作用。
2.掌握正则表达式的匹配模式
3.掌握Patter类和Matcher类的使用
4.掌握String类对正则表达式的支持
一、为什么要有正则表达式?
正则表达式可以方便的对字符串数据进行匹配,可以执行更加复杂项的字符串验证、拆分、替换功能。
注意:
正则表达式本身是字符串,它也只对字符串进行操作。
例如:
现在要求判断一个字符串是否由数字组成,则可以有以下两种做法:
1.不使用正则完成。
publicclassRegexDemo01{
publicstaticvoidmain(Stringargs[]){
Stringstr="1234567890";//此字符串由数字组成
booleanflag=true;//定义一个标记变量
//要先将字符串拆分成字符数组,之后依次判断
charc[]=str.toCharArray();//将字符串变为字符数组
for(inti=0;i if(c[i]<'0'||c[i]>'9'){//如果满足条件,则表示不是数字 flag=false;//做个标记 break;//程序不再向下继续执行 } } if(flag){ System.out.println("是由数字组成! "); }else{ System.out.println("不是由数字组成! "); } } }; 此代码的基本思路: 就是通过将字符串转化成字符数组,实现字符串拆分,之后每一个字符进行验证。 这样不仅麻烦,并且若此需求更复杂一些,则此代码就会随之更加复杂。 2.使用正则完成。 importjava.util.regex.Pattern; publicclassRegexDemo02{ publicstaticvoidmain(Stringargs[]){ Stringstr="1234567890";//此字符串由数字组成 if(Ppile("[0-9]+").matcher(str).matches()){//使用正则 System.out.println("是由数字组成! "); }else{ System.out.println("不是由数字组成! "); } } }; 正则表达式的发展史: 正则是在JDK1.4之后引入到Java中。 Pattern类,Matcher类: 这两个类是正则表达式的核心类。 这两个类都定义在java.util.regex包中。 Pattern类定义了一系列使用方法及正则规范。 下表是常用的正则规则: 规范 描述 规范 描述 \\ 表示一个\ [abc] 字符a,b或c [^abc] 除了abc之外的任意字符 [a-zA-Z0-9] 表示由字母数字组成 \d 表示数字 \D 表示非数字 \w 表示字母数字下划线 \W 表示非字母数字下划线 \s 表示所有的空白字符 \S 表示所有非空白字符 ^ 行的开头 $ 行的结尾 . 表示除换行符之外的任意字符 详细: \d: 数字,相当于[0-9]\D: 非数字,相当于[^0-9] \w字母、数字、下划线,相当于[a-zA-Z0-9_]\W非字母、数字、下划线,相当于[^a-zA-Z0-9_] 表2: 正则表达式: 数量表示 规范 描述 规范 描述 X 表示必须出现一次 X? 表示可以出现0次或1次 X+ 表示可以出现1次或多次 X* 表示可以出现0次,1次或多次 X{n} X必须出现n次 X{n,m} X必须出现n----m次 X{n,} X必须出现n次以上 以上的正则表达式如果想要驱动起来,则必须使用Pattern类和Matcher类。 Pattern主要是表示规则。 即正则表达式的规则需要在Pattern类中使用。 Matcher类主要是执行验证的功能。 它主要使用Pattern指定好的验证规则 注意: Pattern类中没有明显的构造方法供用户使用。 则肯定此类的构造方法被私有化了。 那么可以直接从Pattern类中取得本类的实例。 上面表中的第一个方法就是通过指定的正则表达式就可以编译生成一个Pattern类的对象。 Pattern类有一个方法,如上表中的第二个方法,这个方法可以实例化Matcher类对象。 思考 : importjava.util.regex.Pattern; importjava.util.regex.Matcher; publicclassRegexDemo03{ publicstaticvoidmain(Stringargs[]){ Stringstr="1983-07-27";//指定好一个日期格式的字符串 Stringpat="\\d{4}-\\d{2}-\\d{2}";//指定好正则表达式 Patternp=Ppile(pat);//实例化Pattern类 Matcherm=p.matcher(str);//实例化Matcher类 if(m.matches()){//进行验证的匹配,使用正则 System.out.println("日期格式合法! "); }else{ System.out.println("日期格式不合法! "); } } }; 可以通过Pattern实现字符串的拆分功能。 需求: 把一个字符串中所有的字母取出来。 importjava.util.regex.Pattern; importjava.util.regex.Matcher; publicclassRegexDemo04{ publicstaticvoidmain(Stringargs[]){ //要求将里面的字符取出,也就是说按照数字拆分 Stringstr="A1B22C333D4444E55555F";//指定好一个字符串 Stringpat="\\d+";//指定好正则表达式 Patternp=Ppile(pat);//实例化Pattern类 Strings[]=p.split(str);//执行拆分操作 for(intx=0;x System.out.print(s[x]+"\t"); } } }; 还可以使用Matcher类中的字符串替换功能。 需求: 将一个字符串中的所有数字替换成下划线 importjava.util.regex.Pattern; importjava.util.regex.Matcher; publicclassRegexDemo05{ publicstaticvoidmain(Stringargs[]){ //要求将里面的字符取出,也就是说按照数字拆分 Stringstr="A1B22C333D4444E55555F";//指定好一个字符串 Stringpat="\\d+";//指定好正则表达式 Patternp=Ppile(pat);//实例化Pattern类 Matcherm=p.matcher(str);//实例化Matcher类的对象 StringnewString=m.replaceAll("_"); System.out.println(newString); } }; 从之前的代码中可以发现,很多的代码除了字符串与正则表达式不同,其他内容一样。 因此,在Java1.4以后对正则表达式进行了一些扩充。 在String类中开始直接支持正则表达式的操作。 String类对正则表达式的支持: importjava.util.regex.Pattern; importjava.util.regex.Matcher; publicclassRegexDemo06{ publicstaticvoidmain(Stringargs[]){ Stringstr1="A1B22C333D4444E55555F".replaceAll("\\d+","_"); booleantemp="1983-07-27".matches("\\d{4}-\\d{2}-\\d{2}"); Strings[]="A1B22C333D4444E55555F".split("\\d+"); System.out.println("字符串替换操作: "+str1); System.out.println("字符串验证: "+temp); System.out.print("字符串的拆分: "); for(intx=0;x System.out.print(s[x]+"\t"); } } }; 在使用正则表达式时,有一点是需要特别注意的: 复杂拆分,多次拆分,需要用\\转义的字符,比如| importjava.util.regex.Pattern; importjava.util.regex.Matcher; publicclassRegexDemo07{ publicstaticvoidmain(Stringargs[]){ Stringinfo="LXH: 98|MLDN: 90|LI: 100";//定义一个字符串 //拆分的形式: /* LXH-->98 MLDN-->90 LI-->100 */ Strings[]=info.split("\\|"); System.out.println("字符串的拆分: "); for(intx=0;x Strings2[]=s[x].split(": "); System.out.println(s2[0]+"\t"+s2[1]); } } }; 若发现一个字符串无法按照一个字符拆分的话,则需要转义。 转义时两个\表示一个\ 总结: 使用正则表达式可以完成验证、拆分、替换等复杂的功能。 在开发中一般都会使用String类中已提供好的正则支持。 而往往很少直接使用Pattern类或Matcher类。 在正则应用时,注意敏感字的转义操作。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 正则 表达式