Java正则表达式的使用

正则表达式

前言:本篇博客将介绍正则表达式在Java中的应用,其他语言类似,正则表达式是一个共有的规则。


目录

正则表达式

一、概述

二、正则表达式规则

三、栗子说明

总结


 

一、概述

正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。在众多语言中都可以支持正则表达式,如Perl、PHP、Java、Python、Ruby等。当然在Java中也可以通过调用相关API的方式达到检索,替换文本字符串的目的。但是有了正则表达式写代码更加简洁,通常两三行代码就可以达到目的。

二、正则表达式规则

我们先览为快,看看正则表达式的匹配规则吧:

模式描述
\w匹配字母、数字、下划线
\W匹配字母、数字、下划线
\s匹配任意空白字符,相当于[\t\n\r\f]
\S匹配任意非空字符
\d匹配任意数字,相当于[0-9]
\D匹配非数字的字符
\A匹配字符串开头
\Z匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串
\z匹配字符串结尾,如果存在换行,同时还会匹配换行符
\G匹配最后匹配完成的位置
\n匹配一个换行符
\t匹配一个制表符
^匹配一行字符串的开头
$匹配一行字符串的结尾
.匹配任意字符,除了换行符
[^…]不在[]中的字符,比如[^abc]匹配除了a、b、c之外的字符
*匹配0个或多个表达式
+匹配1个或多个表达式
?匹配0个或1个前面的正则表达式定义的片段,非贪婪方式
()匹配括号内的表达式,也表示一个组
{n}精确匹配n个前面的表达式,比如\d{n},代表n个数字
{n,m}匹配n到m次由前面正则表达式定义的片段,贪婪方式

三、栗子说明

package com.houbo.shizhan;

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

public class Regex {
    //匹配数字
    public void regex1(){
        String string = "9";
        String regex = "[0-9]";
        boolean flag = Pattern.matches(regex,string);
        System.out.println(flag);
    }
    //匹配3到5个字母
    public void reges2(){
        String str = "hello";
        String regex = "[a-zA-Z]{3,5}";
        boolean matches = str.matches(regex);
        System.out.println(matches);
    }
    //第一个数字是1,第二个数字是2,3,7,8任意一个,后面9位不包含4
    public void regex3(){
        String str = "13656231253";
        String regex = "1[2378][0-35-9]{9}";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        boolean matches = matcher.matches();
        System.out.println(matches);
    }
    //把字母替换成$ 把数字替换成0
    public void regexReplace(){
        String str = "12a6B985Ccv65";
        String regex = "[a-zA-Z]+";
        String regex2 = "\\d+";
        String s = str.replaceAll(regex, "$");
        System.out.println(s);
        String s1 = str.replaceAll(regex2, "0");
        System.out.println(s1);
    }
    //按大写字母切割字符串
    public void splite(){
        String str = "oneTtowTthreeDfourJfive";
        String regex = "[A-Z]";
        String[] split = str.split(regex);
        for (String s:split){
            System.out.println(s+" ");
        }
    }
    public static void main(String[] args) {
        Regex re = new Regex();
        re.regex1();
        re.reges2();
    }
        /*贪婪匹配 .*
     * 匹配中间数字,只能得到7
     * 会尽可能多的匹配数据
     */
    public void greedy(){
        String s = "Hello 123 4567 World_This is a Regex Demo";
        Pattern pattern = Pattern.compile("Hello.*(\\d+).*Demo");
        Matcher matcher = pattern.matcher(s);
        if(matcher.find()) {
            System.out.println(matcher.group(1));  //匹配到的整个结果
        }
    }

    /**
     * 非贪婪模式 .*?
     */
    public void fGreedy(){
        String s = "Hello 123 4567 World_This is a Regex Demo";
        Pattern pattern = Pattern.compile("Hello.*?(\\d+).*Demo");
        Matcher matcher = pattern.matcher(s);
        if(matcher.find())  {
            System.out.println(matcher.group());
            System.out.println(matcher.group(1));
        }
    }
}

贪婪模式: 

content = 'aacbacdbc'
pattern = re.compile('ac.*?b')
result = re.findall(pattern,content)
print(result)

 结果:
[‘acb’, ‘acdb’] 

非贪婪模式:

content = 'aacbacbc'
pattern = re.compile('a.*?b')
result = re.search(pattern,content)
print(result.group())

结果:
aacb


总结

在java中调用正则表达式的类是java.util.regex.Matcher和java.util.regex.Pattern,java.util.regex包是从jdk1.4开始提供的。正则表达式让我们对于字符串处理更加灵活快捷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值