正则表达式

 

 

常用正则规范

序号 规范 描述 序号 规范 描述
1 \\ 表示反斜线(\)字符 9 \w 表示字母,数字,下划线
2 \t 制表符 10 \W 表示非字母,数字,下划线
3 \n 换行 11 \s 表示所有的空白字符(换行,空格等)
4 [abc] 表示字符a,b或c 12 \S 表示所有非空白字符
5 [^abc] 表示除了a,b,c之外的任意字符 13 ^ 行开头
6 [a-zA-Z0-9] 表示由字母.数字组成 14 $ 行的结尾
7 \d 表示数字 15 . 匹配除换行符之外的任意字符
8 \D 表示非数字      

数量表示

序号 规范 描述 序号 规范 描述
1 X 必须出现一次 5 X{n} 必须出现n次
2 X? 出现0次或1次 6 X{n,} 必须出现n次以上
3 X* 可以出现0次,1次或者多次 7 X{n,m} 必须出现n到m次
4 X+ 可以出现1次或者多次      

1,认识正则表达式

正则表达式可以方便的对数据进行匹配,还可以执行更加复杂的字符串验证,拆分,替换功能,它用于操作字符串数据

正则表达式操作类是通过Pattern和Matcher两个类来完成的

2,Pattern类和Matcher类

这两个类都是定义在java.util.regex包中的,Pattern类的主要作用是进行正则规范的编写,而Matcher类主要是执行规范,验证一个字符串是否符合其规范

Pattern类常用的方法123

在Pattern类中如果要取得Pattern类实例的话,则必须使用compile()方法.

package cn.regex;

import java.util.regex.Pattern;

public class RegexDemo {
    public static void main(String[] args) {
        String str = "1234567890";
        if(Pattern.compile("[0-9]+").matcher(str).matches()){
            System.out.println("是由数字组成");
        }else{
            System.out.println("不是数字组成");
        }
    }
}

如果要验证一个字符串是否符合规范的话,则可以使用Matcher类,该类中常用的方法

45

package cn.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo02 {
    public static void main(String[] args) {
        dateRegex();
        splitString();
    }

    public static void splitString() {
        String str = "AAA1111BBB33333CCC2222";
        String regex = "\\d+";
        Pattern p = Pattern.compile(regex);
        String[] s = p.split(str);
        for(String s1 : s){
            System.out.print(s1);
        }
    }

    private static void dateRegex() {
        String str = "1990-11-11";
        String regex = "\\d{4}-\\d{2}-\\d{2}";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        if(m.matches())
            System.out.println("日期格式合法!");
        else
            System.out.println("日期格式不合法");
    }

}

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

在String类中,有三个方法支持正则操作,以后一般使用的是String类中的方法,这样会比较方便

123

package cn.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo02 {
    public static void main(String[] args) {
        dateRegex();
        splitString();
    }

    public static void splitString() {
        String str = "AAA1111BBB33333CCC2222";
        String regex = "\\d+";
        Pattern p = Pattern.compile(regex);
        String[] s = p.split(str);
        for(String s1 : s){
            System.out.print(s1);
        }
    }

    private static void dateRegex() {
        String str = "1990-11-11";
        String regex = "\\d{4}-\\d{2}-\\d{2}";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        if(m.matches())
            System.out.println("日期格式合法!");
        else
            System.out.println("日期格式不合法");
    }

}

4,正则表达式的作用

(1)匹配 使用String中的mathches方法

public static void demo_1() {
        String tel = "15061539693";
        String regex = "1[358][0-9]{9}";     //  \\d和[0-9]效果一样
        boolean b = tel.matches(regex);
        System.out.println(b);
    }

(2)切割  使用的是String中的split方法

public static void demo2() {
        String str = "zhangsan     lisi     wangwu";
        String[] names = str.split(" +");//空格至少出现一次  和{1,}一样
        for (String string : names) {
            System.out.println(string);
        }
        String str2 = "zhangsanaaaaalisibbbbbwangwu";
        String[] name = str2.split("(.)\\1+");
        for (String string2 : name) {
            System.out.println("2:"+string2);
        }
    }

(.)表示一个捕获组,1表示使用到该组,+表示可以出现一次或者是多次

(3)替换  String中replaceAll方法

public static void demo3() {
        String str1 = "zhangsanAAAAlisiBBBBwangwu";
        String s = str1.replaceAll("(.)\\1+", "$1");
        System.out.println(s);
        String str2 = "15061539693";
        String s2 = str2.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
        System.out.println(s2);
    }

(4)获取
          Pattern p = Pattern.compile("a*b");  将正则的规则进行对象的封装
          Matcher m = p.matcher("aaaaab");  通过正则对象的matcher方法字符串相互关联,获取要对字符串进行操作的Matcher
          boolean b = m.matches(); 通过Matcher匹配器对象的方法对字符串进行操作

public static void demo_4() {
        String str = "aa ada awa aa aaaaaa  aqa";
        String regex = "\\b[a-z]{3}\\b";  //  \\b表示单词边界
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        while(m.find()){
            System.out.println(m.group());
        }        
    }
posted @ 2014-07-28 17:02  木有杂念  阅读(340)  评论(0编辑  收藏  举报