【Java常用类库】_正则表达式笔记

【Java常用类库】_正则表达式笔记

本章目标:
掌握正则表达式的作用
掌握正则表达式的匹配模式
掌握Pattern类和Matcher类的使用
掌握String对正则的支持


例如:现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法:
1.不使用正则;
2.使用正则;

实例一:
public class RegexDemo01{
    public static void main(String[] args){
        String str = "1234567890";    //此字符串由数字组成
        boolean flag = true;        //定义一个标识变量
        char[] c = str.toCharArray();    //将字符串变为字符数组
        for(int i=0;i<c.length;i++){
            if(c[i]<'0'||c[i]>'9'){
                flag = false;
                break;        //程序不再向下继续执行
            }        
        }
        if(flag){
            System.out.println("是由数字组成!");
        }else{    
            System.out.println("不是由数字组成!");
        }    
    }
}


实例二:
import java.util.regex.Pattern;
public class RegexDemo02{
    public static void main(String[] args){
        String str = "13456789";    //此字符串由数字组成
        if(Pattern.compile("[0-9]+").matcher(str).matches()){
            System.out.println("是由数字组成!");
        }else{
            System.out.println("不是由数字组成!");
        }    
    }
}


可以发现使用正则操作代码更加简单。

3.2、Pattern、Matcher类

这两个类都定义在java.util.regex包中

Pattern类的主要作用是进行正则规范(如之前的“[0-9]”就属于正则规范)
而Matcher类主要是执行规范,验证一个字符串是否符合其规范。

常用正则规则一:

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    .        匹配除换行外的任意一个字符

\d:表示数字,[0-9]
\D:表示非数字,[^0-9]
\w:表示字母、数字、下划线,[a-zA-Z0-9]
\W:[^a-zA-Z0-9]

常用正则规则二:

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

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

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

No    规范        描述
1    XY        X规范后跟着Y规范
2    X|Y        X规范或Y规范    
3    (X)        做为一个捕捉组规范

以下的正则,如果要想驱动起来,则必须依靠Pattern或Matcher类。
Pattern主要是表示一个规则的意思,即:正则表达式的规则需要在Pattern类中使用。
Matcher类主要表示使用Pattern指定好的验证规则。

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()方法。

本类中没有明确的构造方法可以供用户使用,那么肯定此类的构造方法被私有化了,则可以直接从Pattern类中取得本类的实例。
指定好操作的正则:public static Pattern compile(String regex)
可以为matcher类实例化:public Matcher matcher(CharSequence input)
拆分:public String[] split(CharSequence input)
    回顾:String 中也存在拆分操作。

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

No    方法                        类型        描述
1    public boolean matches                普通        执行验证
2    public String replaceAll(String replacement)    普通        字符串替换

实例二:验证一个字符串是否是合法的日期格式

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo03{
    public static void main(String args[]){
        String str = "1983-07-27";
        String pat = "\\d{4}-\\d{2}-\\d{2}";
        Pattern p = Pattern.compile(pat);    //实例化Pattern类
        Matcher m = p.matcher(str);        //实例化Matcher类
        if(m.matches()){        //进行验证的匹配,使用正则
            System.out.println("日期格式合法!");
        }else{
            System.out.println("日期格式不合法!");
        }
    }
}



在Pattern类中也可以使用正则进行字符串的拆分功能。

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo04{
    public static void main(String args[]){
        String str = "A1B22C333D444E55555F";
        String pat = "\\d+";    //指定好正则表达式
        Pattern p = Pattern.compile(pat);
        String s[] = p.split(str);    //执行拆分操作
        for(int x=0;x<s.length;x++){
            System.out.println(s[x]+"\t");
        }
    }
}


还可以使用Matcher类中的替换功能。

范例:将字符串中的全部数字替换成“_”
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo05{
    public static void main(String args[]){
        String str = "A1B22C333D444E55555F";
        String pat = "\\d+";    //指定好正则表达式
        Pattern p = Pattern.compile(pat);
        Matcher m = p.matcher(str);
        String newString = m.replaceAll("_");
        System.out.println(newString);    
    }
}



只要使用正则的验证的规则,那么就可以匹配各种复杂的字符串。

3.3、String 类对正则的支持

从之前的操作中,可以发现,很多的代码除了要求的字符串不同,使用的正则规则不同,基本上就没有什么特别的了。
所以在JDK1.4之后,java对正则进行了一些扩充,在String 中开始直接支持正则的操作。

String 对正则表达式的支持

在String 类中有以下三个方法是支持正则操作的。

No.    方法                                类型    描述
1    public boolean matches(String regex)                普通    字符串匹配
2    public String replaceAll(String regex,String replacement)    普通    字符串替换
3    public String[]    split(String regex)                普通    字符串拆分

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo06{
    public static void main(String[] args){
        String str = "A1B22C333D444E55555F".replaceAll("\\d+","_");
        boolean temp = "1982-07-27".matches("\\d{4}-\\d{2}-\\d{2}");
        String s[] = "A1B22C333D444E55555F".split("\\d+");
        System.out.println("字符串替换操作:"+str);
        System.out.println("字符串验证:"+temp);
        System.out.println("字符串的拆分:");
        for(int x=0;x<s.length;x++){
            System.out.println(s[x]+"\t");
        }
    }
}



但是,在使用正则的时候有一点是需要特别注意的。
现在,假设有如下一个字符串的拆分程序。
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo07{
    public static void main(String[] args){
        String info = "LXH:98|MLDN:90|LI:100";
        String s[] = info.split("\\|");
        System.out.println("字符串拆分:");
        for(int x=0;x<s.length;x++){
            String s2[] = s[x].split(":");
            System.out.println(s2[0]+"\t"+s2[1]);
        }
    }
}


如果有时候发现一个字符串无法按照指定的字符拆分的话,则需要使用"\"转义,转义的时候两个"\"表示一个"\"。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e421083458

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值