java正则表达式匹配规则超详细总结

 更新时间:2022年10月09日 10:16:42   作者:SmarTongs  
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别,下面这篇文章主要给大家介绍了关于java正则表达式匹配规则的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

1 单个字符的匹配规则如下:

2 多个字符的匹配规则如下:

3 复杂匹配规则主要有:

4 提取匹配的字符串子段

Pattern p = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})");
Matcher m = p.matcher("010-12345678");

正则表达式用(...)分组可以通过Matcher对象快速提取子串:
- group(0)表示匹配的整个字符串;
- group(1)表示第1个子串,group(2)表示第2个子串,以此类推。

5 非贪婪匹配

用表达式

(\d+)(0*)

去匹配123000,10100,1001结果都是\d+匹配到所有字符而0*未用到,因为正则表达式默认采取贪婪匹配策略(匹配尽可能多的字符),在\d+后边加个?就表示非贪婪(匹配尽可能少的字符),非贪婪如下:

(\d+?)(0*)

6 替换和搜索

6.1 分割字符串

对输入的不规则字符串利用string.split()传入正则表达式提取想要的部分:

"a b c".split("\\s"); // { "a", "b", "c" }
"a b  c".split("\\s"); // { "a", "b", "", "c" }
"a, b ;; c".split("[\\,\\;\\s]+"); // { "a", "b", "c" }

6.2 搜索字符串

public class Main {
    public static void main(String[] args) {
        String s = "the quick brown fox jumps over the lazy dog.";
        Pattern p = Pattern.compile("\\wo\\w");
        Matcher m = p.matcher(s);
        while (m.find()) {
            String sub = s.substring(m.start(), m.end());
            System.out.println(sub);
        }
    }
}

output:

row
fox
dog

6.3 替换字符串

使用正则表达式替换字符串可以直接调用String.replaceAll(),它的第一个参数是正则表达式,第二个参数是待替换的字符串。我们还是来看例子:

public class Main {
    public static void main(String[] args) {
        String s = "The     quick\t\t brown   fox  jumps   over the  lazy dog.";
        String r = s.replaceAll("\\s+", " ");
        System.out.println(r); // "The quick brown fox jumps over the lazy dog."
    }
}

6.4 反向引用

如果我们要把搜索到的指定字符串按规则替换,比如前后各加一个xxxx,这个时候,使用replaceAll()的时候,我们传入的第二个参数可以使用$1、$2来反向引用匹配到的子串。例如:

public class Main {
    public static void main(String[] args) {
        String s = "the quick brown fox jumps over the lazy dog.";
        String r = s.replaceAll("\\s([a-z]{4})\\s", " <b>$1</b> ");
        System.out.println(r);
    }
}

output

the quick brown fox jumps <b>over</b> the <b>lazy</b> dog.

总结 

到此这篇关于java正则表达式匹配规则的文章就介绍到这了,更多相关java正则表达式匹配规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 拉钩网java笔试题分享

    拉钩网java笔试题分享

    这篇文章主要介绍了拉钩网java笔试题分享,下面是题目和实现示例,需要的朋友可以参考下
    2014-05-05
  • Java 基础详解(泛型、集合、IO、反射)

    Java 基础详解(泛型、集合、IO、反射)

    下面小编就为大家带来一篇Java 基础详解(泛型、集合、IO、反射)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 浅谈java中的移动位运算:,>>>

    浅谈java中的移动位运算:,>>>

    这篇文章主要介绍了java中的移动位运算:,>>>文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • springboot CommandLineRunner接口实现自动任务加载功能

    springboot CommandLineRunner接口实现自动任务加载功能

    这篇文章主要介绍了springboot CommandLineRunner接口实现自动任务加载功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • SpringBoot整合SpringSecurity和JWT和Redis实现统一鉴权认证

    SpringBoot整合SpringSecurity和JWT和Redis实现统一鉴权认证

    Spring Security是一个可以为Java应用程序提供全面安全服务的框架,同时它也可以轻松扩展以满足自定义需求,本文主要介绍了SpringBoot整合SpringSecurity和JWT和Redis实现统一鉴权认证,感兴趣的可以了解一下
    2023-11-11
  • 了解SpringMVC的上传和下载

    了解SpringMVC的上传和下载

    今天小编就为大家分享一篇关于Spring整合Springmvc的相关介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-07-07
  • springboot源码中this::selfInitialize怪异用法的含义解析

    springboot源码中this::selfInitialize怪异用法的含义解析

    这篇文章主要介绍了springboot源码中this::selfInitialize怪异用法的含义解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • MybatisPlus为何可以不用@MapperScan详解

    MybatisPlus为何可以不用@MapperScan详解

    这篇文章主要给大家介绍了关于MybatisPlus为何可以不用@MapperScan的相关资料,文中通过图文介绍的非常详细,对大家学习或者使用MybatisPlus具有一定的参考学习价值,需要的朋友可以参考下
    2023-04-04
  • SpringMVC @RequestMapping注解应用方法示例讲解

    SpringMVC @RequestMapping注解应用方法示例讲解

    通过@RequestMapping注解可以定义不同的处理器映射规则,下面这篇文章主要给大家介绍了关于SpringMVC中@RequestMapping注解用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • SpringBoot实现OneDrive文件上传的详细步骤

    SpringBoot实现OneDrive文件上传的详细步骤

    这篇文章主要介绍了SpringBoot实现OneDrive文件上传的详细步骤,文中通过代码示例和图文讲解的非常详细,对大家实现OneDrive文件上传有一定的帮助,需要的朋友可以参考下
    2024-02-02

最新评论