Java从零开始学三十二(正则表达式)

9/6/2015来源:Java教程人气:2291

java从零开始学三十二(正则表达式)一、为什么要有正则正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证、拆份、替换功能。例如:现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法:不使用正则完成使用正则完成二、Pattern、Matcher类如果要想在程序中应用正则表达式则必须依靠Pattern类与Matcher类,这两个类都在java.util.regex包中定义。Pattern类的主要作用是进行正则规范的编写,而Matcher类主要是执行规范,验证一个字符串是否符合其规范。常用正则规则
No.规范描述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.匹配除换行符之外的任意字符

   数量表示(X表示一组规范)
No.规范描述No.规范描述
1X必须出现一次2X?可以出现0次或1次
3X*可以出现0次、1次或多次4X+可以出现1次或多次
5X{n}必须出现n次6X{n,}必须出现n次以上
7X{n,m}必须出现n~m次

逻辑运算符(X、Y表示一组规范)
No.规范描述No.规范描述
1XYX规范后跟着Y规范2X | YX规范或Y规范
3(X)做为一个捕获组规范

Pattern类的常用方法
No.方法类型描述
1public static Pattern compile(String regex)普通指定正则表达式规则
2public Matcher matcher(CharSequence input)普通返回Matcher类实例
3public String[] split(CharSequence input)普通字符串拆分
在Pattern类中如果要想取得Pattern类实例,则必须调用compile()方法。Matcher类的常用方法
No.方法类型描述
1public boolean matches()普通执行验证
2public String replaceAll(String replacement)普通字符串替换
如果要验证一个字符串是否符合规范,则可以使用Matcher类三、正则验证3.1、验证字符组成
package com.pb.demo2;import java.util.regex.Pattern;public class RegexDemo1 {    public static void main(String[] args) {        String str="1234567890"; //声明字符串由数字组成        //使用正则验证        if(Pattern.compile("[0-9]+").matcher(str).matches()){            System.out.PRintln("数字组成。");        }else{            System.out.println("不全是由数字组成。");        }            }}
3.2、验证一字符串是否是合法日期格式

package com.pb.demo2;import java.util.regex.Matcher;import java.util.regex.Pattern;/* * 验证一字符串是否是合法日期格式 */public class RegexDemo2 {    public static void main(String[] args) {        String str="1983-07-23";        String pat="\\d{4}-\\d{1,2}-\\d{1,2}";   //定义规则        Pattern p=Pattern.compile(pat);      //实例化pattern类对象        Matcher m=p.matcher(str);                 //验证字符串内容是否合法        //使用正则验证        if(m.matches()){            System.out.println("日期格式合法! !");        }else{            System.out.println("日期格式不合法! !");        }                    }}
3.3、按照字符串的数字将字符串拆分
package com.pb.demo2;import java.util.regex.Matcher;import java.util.regex.Pattern;/* * 按照字符串的数字将字符串拆分 */public class RegexDemo2 {    public static void main(String[] args) {    String str="A1B22C333D4444E55555F6G77";    String pat="\\d+";                         //定义拆分的规则    Pattern p=Pattern.compile(pat); //实例化Pattern类    String [] ss=p.split(str);                //拆分为字符串数组                    //遍历        for (String s : ss) {            System.out.print(s+"\t");        }            }}

结果:

A    B    C    D    E    F    G    
3.4、替换操作
package com.pb.demo2;import java.util.regex.Matcher;import java.util.regex.Pattern;/* * 按照字符串的数字将字符串替换 */public class RegexDemo4 {    public static void main(String[] args) {    String str="A1B22C333D4444E55555F6G77";    String pat="\\d+";                         //定义替换的规则    Pattern p=Pattern.compile(pat); //实例化Pattern类    Matcher m=p.matcher(str);            //实例化Matcher类    String newStrirng=m.replaceAll("_");//替换的字符    System.out.println(newStrirng);            }}

结果:

A_B_C_D_E_F_G_
3.5、邮箱验证
package com.pb.demo2;import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;/* * 邮箱是否合法 */public class RegexDemo5 {    public static void main(String[] args) {    Scanner input=new Scanner(System.in);    //String pat="^[A-Za-z0-9_][email protected][A-Za-z0-9_]+(.[A-Za-z_]{2,3}){1,2}$";    String regEx="^\\[email protected]\\w+(.[A-Za-z_]{2,3}){1,2}$";    System.out.println("输入邮箱:");    String email=input.nextLine();    Pattern p=Pattern.compile(regEx);    Matcher m=p.matcher(email);    if(m.matches()){        System.out.println("邮箱合法!!");    }else{        System.out.println("邮箱不合法!!");    }            }}
四、String对正则表达式的支持在String类中有以下三个方法是支持正则操作
No.方法类型描述
1public boolean matches(String regex)普通字符串匹配
2public String replaceAll(String regex,String replacement)普通字符串替换
3public String[] split(String regex)普通字符串拆分