Fork me on GitHub

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.
规范
描述
1
X
必须出现一次
2
X?
可以出现0次或1次
3
X*
可以出现0次、1次或多次
4
X+
可以出现1次或多次
5
X{n}
必须出现n次
6
X{n,}
必须出现n次以上
7
X{n,m}
必须出现n~m次

 

 

 

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

 

 

 

 
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()方法。
 
Matcher类的常用方法
No.
方法
类型
描述
1
public boolean matches()
普通
执行验证
2
public 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_]+@[A-Za-z0-9_]+(.[A-Za-z_]{2,3}){1,2}$";
    String regEx="^\\w+@\\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.
方法
类型
描述
1
public boolean matches(String regex)
普通
字符串匹配
2
public String replaceAll(String regex,String replacement)
普通
字符串替换
3
public String[] split(String regex)
普通
字符串拆分
 

 

posted @ 2015-02-27 00:49  森林森  阅读(1199)  评论(3编辑  收藏  举报