当前位置: 首页 > news >正文

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));    // trueSystem.out.println("cd: " + "cd".matches(regex1));    // true  System.out.println("cdd: " + "cdd".matches(regex1));  // trueSystem.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));    // trueSystem.out.println("abcd: " + "abcd".matches(regex2)); // trueSystem.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));  // trueSystem.out.println("xcd: " + "xcd".matches(regex3));  // trueSystem.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

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

http://www.dtcms.com/a/528600.html

相关文章:

  • 做pc端网站平台网站做游戏活动
  • 【开发者导航】全自动 AI 视频创作与发布工具:LuoGen-agent
  • 网站 空间地址是什么苏州网站制作公司
  • Qt-多线程编程:互斥量 信号量
  • TERMSRV!WinStationLpcThread函数和TERMSRV!WinStationLpcHandleConnectionRequest函数分析
  • 网站体验方案wordpress更改前端引用
  • vue-day01
  • LLM驱动的自动化购车顾问及评测系统
  • 现代软件工程课程 个人博客作业2-结对编程项目总结
  • Elasticsearch8.4.1升级Elasticsearch9.1.5
  • 中国中小企业网站大学生招聘就业网
  • 深度学习(3)神经网络
  • FastAPI之 SQLAIchemy
  • [人工智能-大模型-70]:模型层技术 - 从数据中自动学习一个有用的数学函数的全过程,AI函数计算三大件:神经网络、损失函数、优化器
  • 网站开发最适合的浏览器wordpress下载页插件下载
  • EN 300-2006 欧松板(OSB)检测
  • 智能优化神经网络预测
  • 【Docker】镜像仓库
  • 2.Linux指令(三)
  • 【C++】哈希表:除留余散法和哈希桶的实现
  • 沧州网站运营自己做网站需要什么材料
  • PostgreSQL查不动?分区表+覆盖索引+物化视图的优化魔法了解下?
  • 多相CFD中的模型转换:Ansys Fluent中的从DPM到VOF和欧拉壁膜
  • 关于学校的网站模板免费下载高端网站建设磐石网络好
  • 在半导体制造中如何选择最佳的刻蚀方法?
  • 构建Django的Web镜像
  • 历史数据分析——锦江酒店
  • 做网站站怎么赚钱吗企业网站推广的收获与启示
  • 大厂硬件岗位笔试题库-卷11
  • 【操作系统】408操作系统核心考点精讲:第二章——进程的概念、组成与特征​