java 正则表达式所有的优先级示例详解

 更新时间:2025年10月27日 10:20:40   作者:xiaozaq  
本文给大家介绍java正则表达式所有的优先级示例,理解这些优先级规则对于编写正确的正则表达式至关重要,特别是当表达式包含多个操作符时,本文介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

Java正则表达式的优先级从高到低如下:

正则表达式运算符优先级表

优先级运算符描述示例
1\转义符\\. 匹配点号
2(), (?:), (?=), (?!)分组和断言(abc), (?:abc), a(?=b)
3*, +, ?, {n}, {n,}, {n,m}量词a+, b{3}, c{2,5}
4字符序列字符连接abc 表示 a 后跟 b 后跟 c
5^, $, \b, \B锚点^start, end$
6|或运算cat|dog

详细说明和示例

1. 转义符\(最高优先级)

String regex = "a\\.b";  // 匹配 "a.b",而不是 "a" + 任意字符 + "b"

2. 分组和断言

// 捕获分组
String regex1 = "(ab)+";     // 匹配 "ab", "abab", "ababab" 等
// 非捕获分组  
String regex2 = "(?:ab)+";   // 匹配但不捕获
// 正向先行断言
String regex3 = "a(?=b)";    // 匹配后面跟着b的a
// 负向先行断言
String regex4 = "a(?!b)";    // 匹配后面不跟b的a

3. 量词

String regex1 = "ab?c";      // 匹配 "ac" 或 "abc" (b出现0或1次)
String regex2 = "a+b";       // 匹配 "ab", "aab", "aaab" 等 (a出现1次以上)
String regex3 = "a*b";       // 匹配 "b", "ab", "aab" 等 (a出现0次以上)
String regex4 = "a{2,4}";    // 匹配 "aa", "aaa", "aaaa"

4. 字符序列 (隐式连接)

String regex = "abc";        // 匹配 "abc",优先级高于 |

5. 锚点

String regex1 = "^abc";      // 匹配以abc开头的字符串
String regex2 = "abc$";      // 匹配以abc结尾的字符串
String regex3 = "\\bword\\b"; // 匹配完整的单词"word"

6. 或运算|(最低优先级)

String regex = "cat|dog";    // 匹配 "cat" 或 "dog"

优先级验证示例

public class RegexPrecedence {
    public static void main(String[] args) {
        // 示例1:量词优先于 |
        String regex1 = "ab|cd+";    // 解析为: "ab" 或 "c" + "d"的一次或多次
        System.out.println("ab|cd+ 匹配:");
        System.out.println("ab: " + "ab".matches(regex1));    // true
        System.out.println("cd: " + "cd".matches(regex1));    // true  
        System.out.println("cdd: " + "cdd".matches(regex1));  // true
        System.out.println("abc: " + "abc".matches(regex1));  // false
        // 示例2:分组改变优先级
        String regex2 = "(ab|cd)+";  // 解析为: "ab"或"cd"的一次或多次
        System.out.println("\n(ab|cd)+ 匹配:");
        System.out.println("ab: " + "ab".matches(regex2));    // true
        System.out.println("abcd: " + "abcd".matches(regex2)); // true
        System.out.println("abab: " + "abab".matches(regex2)); // true
        // 示例3:字符连接优先于 |
        String regex3 = "^ab|cd$";   // 解析为: (以ab开头) 或 (以cd结尾)
        System.out.println("\n^ab|cd$ 匹配:");
        System.out.println("abc: " + "abc".matches(regex3));  // true
        System.out.println("xcd: " + "xcd".matches(regex3));  // true
        System.out.println("abcd: " + "abcd".matches(regex3)); // true
    }
}

常见优先级陷阱

// 陷阱1:量词的作用范围
String trap1 = "ab+";    // 匹配 "ab", "abb", "abbb" (只对b量化)
String correct1 = "(ab)+"; // 匹配 "ab", "abab", "ababab" (对ab组量化)
// 陷阱2:| 的范围
String trap2 = "^ab|cd$";    // (^ab) 或 (cd$)
String correct2 = "^(ab|cd)$"; // 以ab或cd开头和结尾
// 陷阱3:断言的范围  
String trap3 = "a(?=b|c)d";  // a后面跟着b或c,然后是d
String correct3 = "a(?=b|cd)e"; // a后面跟着b或cd,然后是e

理解这些优先级规则对于编写正确的正则表达式至关重要,特别是当表达式包含多个操作符时。

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

相关文章

  • Dubbo实例注入过程

    Dubbo实例注入过程

    文章主要介绍了Dubbo框架中ExtensionLoader类的创建、初始化、后处理和注入扩展点的详细过程,特别是通过AdaptiveExtensionInjector进行注入的部分
    2025-11-11
  • Java集合的组内平均值的计算方法总结

    Java集合的组内平均值的计算方法总结

    在Java中,经常需要对集合进行各种操作,其中之一就是计算集合的组内平均值,本文将介绍如何使用Java集合来计算组内平均值,并提供一些示例代码和实用技巧
    2024-08-08
  • JAVA(SpringBoot)集成Jasypt进行加密、解密功能

    JAVA(SpringBoot)集成Jasypt进行加密、解密功能

    Jasypt是一个Java库,专门用于简化加密和解密操作,提供多种加密算法支持,集成到SpringBoot等框架中,通过使用Jasypt,可以有效保护配置文件中的敏感信息,如数据库密码等,避免被未授权访问,Jasypt还支持自定义加密器,提高扩展性和安全性,适用于各种需要加密保护应用场景
    2024-09-09
  • spring-boot-maven-plugin 插件的作用详解

    spring-boot-maven-plugin 插件的作用详解

    添加了spring-boot-maven-plugin插件后,当运行maven打包的命令,项目会被打包成一个可以直接运行的jar包,使用"java -jar"可以直接运行。这篇文章主要给大家介绍spring-boot-maven-plugin 插件的作用,感兴趣的朋友一起看看吧
    2018-10-10
  • Java中内存异常StackOverflowError与OutOfMemoryError详解

    Java中内存异常StackOverflowError与OutOfMemoryError详解

    这篇文章主要介绍了 Java中内存异常StackOverflowError与OutOfMemoryError详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java 调用天气Webservice详解及实例代码

    Java 调用天气Webservice详解及实例代码

    这篇文章主要介绍了Java 调用天气Webservice详解及实例代码的相关资料,这里附实例代码,使用java 调用webservice 的小应用,需要的朋友可以参考下
    2016-11-11
  • JDK与Dubbo中的SPI详细介绍

    JDK与Dubbo中的SPI详细介绍

    这篇文章主要介绍了JDK中的SPI与Dubbo中的SPI,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • linux配置java环境变量详细过程

    linux配置java环境变量详细过程

    这篇文章主要介绍了linux配置java环境变量详细过程,需要的朋友可以参考下
    2015-09-09
  • 彻底搞懂Java多线程(四)

    彻底搞懂Java多线程(四)

    这篇文章主要给大家介绍了关于Java面试题之多线程和高并发的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-07-07
  • Spring Framework中JDBC批量操作的三种实现方式

    Spring Framework中JDBC批量操作的三种实现方式

    本文详细介绍了如何使用 Spring 的 JdbcTemplate 进行高效的数据库批量更新,从而减少与数据库之间的网络往返次数(round-trips),提升性能,下面我将用通俗易懂的方式,结合代码示例和实际场景给大家详细说说,需要的朋友可以参考下
    2025-10-10

最新评论