正则表达式

1、正则表达式最早是从Perl语言中发展而来,在JDK1.4之前如果需要使用正则表达式的相关定义则需要引入其他的*.jar文件,而JDK1.4之后已经默认支持正则表达式,并且提供有java.util.regex开发包,也使String类有方法直接支持正则处理。使用正则表达式的最大特点在于方便进行验证处理,以及方便进行复杂字符串的修改处理。

2、正则标记

java.util.regex开发包中提供有一个Pattern程序类,这个程序类中定义有所有支持的正则标记。

①单个字符匹配:表示由任意字符组成

String str = "aa";
String regex = "a";
System.out.println(str.matches(regex));  //false

②\\匹配\;\n匹配换行;\t匹配制表符

③字符集

[abc]表示可能是a、b、c中的任意一个字符

[^abc]表示不是a、b、c中的任意一个字符

[a-zA-Z]表示由任意一个字母所组成,不区分大小写

[0-9]表示由一位数字组成

④简化字符集

.表示任意的一个字符

\d等价于"[0-9]"范围

String str = "0";
String regex = "\\d";
System.out.println(str.matches(regex));  //true

\D等价于[^0-9]范围

\s匹配任意一位空格、换行(\n)、制表符(\t)

\S匹配任意的非空格数据

\w匹配字母、数字、下划线,等价于[a-zA-Z_0-9]

\W等价于[^a-zA-Z_0-9]

⑤边界匹配

^匹配边界开始

$匹配边界结束

⑥数量表示

表达式?:该正则可以出现0次或1次

表达式*:该正则可以出现0次、1次或多次

表达式+:该正则可以出现1次或多次

表达式{n}:表达式的长度正好为n次

表达式{n,}:表达式的长度正好为n次以上

表达式{n,m}:表达式的长度在n~m次

⑦逻辑表达式

表达式X表达式Y:表达式X紧跟着表达式Y

表达式X | 表达式Y:有一个表达式满足即可

(表达式):为表达式设置一个整体描述,可以为整体描述设置数量单位

3、String类对正则的支持

普通方法:

将指定字符串进行正则判断:public boolean matches​(String regex)

替换全部:public String replaceAll​(String regex,String replacement)

替换首个:public String replaceFirst​(String regex,String replacement)

正则拆分:public String[] split​(String regex)

正则拆分:public String[] split​(String regex,int limit)

小数的判断示例:

String str = "100.0";
String regex = "\\d+(\\.\\d+)?"; //?表示小数部分出现0次或1次
System.out.println(str.matches(regex));

验证邮箱:String regex = "[a-zA-Z0-9]\\w+@\\.(cn|com|net|gov)";

4、java.util.regex开发包

java.util.regex开发包中一共定义了两个类:Pattern类(正则表达式编译)、Matcher(匹配)

Pattern类中正则表达式编译处理方法:public static Pattern compile​(String regex)

字符串拆分方法:public String[] split​(CharSequence input)

示例:

Pattern pat = Pattern.compile(regex); //编译正则表达式
String result[] = pat.split(str); //拆分字符串

Matcher类实现正则匹配的处理类,这个类的对象实例化依靠Pattern类完成。

Pattern pat = Pattern.compile(regex); //编译正则表达式
Matcher mat = pat.matcher(str);
System.out.println(mat.matches());

如果纯粹是进行拆分、替换、匹配操作,无需使用java.util.regex开发包,只依靠String类即可。但是Matcher类中的分组功能是String类中不具备的。

        String str = "INSER INTO dept(deptno, dname, loc) VALUES(#{deptno},#{dname},#{loc})";
        String regex = "#\\{\\w+\\}";
        Pattern pat = Pattern.compile(regex); //编译正则表达式
        Matcher mat = pat.matcher(str);
        while(mat.find()) { //是否有匹配成功的内容
            System.out.println(mat.group(0).replaceAll("#|\\{|\\}", ""));
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值