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

断言(Assertion)中常用的正则表达式

1. 边界类断言

  • ​**^ (开头)​**: 匹配字符串起始位置。
    ^abc   // 匹配以"abc"开头的字符串
  • ​**$ (结尾)​**: 匹配字符串结束位置。
    abc$   // 匹配以"abc"结尾的字符串
  • ​**\b (单词边界)​**: 匹配单词与非单词字符(如空格、标点)之间的位置。
    \bcat\b  // 匹配独立的单词"cat"(前后无其他字母)
  • ​**\B (非单词边界)​**: 匹配非单词边界(如连续字母之间)。
    \Bcat\B  // 匹配"scatter"中的"cat"(前后均有字母)

2. 前瞻断言(Lookahead)​

  • ​**(?=...) (正向前瞻)​**: 后续必须匹配表达式。
    a(?=bc)  // 匹配后面紧跟着"bc"的"a"(如"abc")
  • ​**(?!...) (负向前瞻)​**: 后续不能匹配表达式。
    a(?!bc)  // 匹配后面不是"bc"的"a"(如"ad")

​3. 后顾断言(Lookbehind)

  • ​**(?<=...) (正向后顾)​**: 前面必须匹配表达式。
    (?<=a)bc  // 匹配前面是"a"的"bc"(如"abc")
  • ​**(?<!...) (负向后顾)​**: 前面不能匹配表达式。
    (?<!a)bc  // 匹配前面不是"a"的"bc"(如"xbc")

※ 注意:后顾断言在部分编程语言中不支持复杂表达式(如 Python 需固定长度,JavaScript 部分版本有限制)。


4. 示例应用场景

  1. 验证密码强度​(至少一个大写字母、数字):
    ^(?=.*[A-Z])(?=.*\d).{8,}$  
    // 匹配8位以上,且含大写字母和数字的密码
  2. 提取不在引号中的关键词​:
    \bkeyword\b(?=(?:[^"]*"[^"]*")*[^"]*$)
    // 匹配未在双引号内的"keyword"
  3. 匹配特定分隔符之间的内容​:
    (?<=@)\w+  // 匹配"@username"中的"username"

注意事项

  • 兼容性​:后顾断言(Lookbehind)在旧环境(如 IE)中可能不被支持。
  • 零宽度​:断言只验证位置,不占用字符。
  • 性能​:复杂断言可能影响正则效率,建议测试优化。

通过合理使用断言,可以精确控制匹配逻辑,处理复杂边界条件或依赖上下文的内容验证

http://www.xdnf.cn/news/14495.html

相关文章:

  • 最大公约数
  • 详细讲解Redis为什么被设计成单线程
  • 前端开发面试题总结-vue2框架篇(四)
  • Controller Area Network (CAN) 通信机制简介
  • 解决Matplotlib三维图无法旋转的问题
  • springboot入门之路(一)
  • Spring MVC 处理静态资源请求 - ResourceHandler
  • [Jenkins在线安装]
  • 为什么会出现 make 工程管理器?它到底能做什么?
  • Arduino入门教程:10、屏幕显示
  • python大学校园旧物捐赠系统
  • Linux操作系统之进程(六):进程的控制(上)
  • 分治算法之归并排序
  • Day04_C语言基础数据结构重点复习笔记20250618
  • 反转链表二--LeetCode
  • Neo4j 入门到精通(Cypher语言详解)
  • 前端部署更新后,如何优雅地通知用户刷新页面?
  • OpenCV——图像形态学
  • Arrays.asList() 的不可变陷阱:问题、原理与解决方案
  • 秋招是开发算法一起准备,还是只准备一个
  • 技能系统详解(1)——技能
  • mysql 学习
  • 45-Oracle 索引的新建与重建
  • 6-16阿里前端面试记录
  • RAG 架构地基工程-Retrieval 模块的系统设计分享
  • 学习STC51单片机41(芯片为STC89C52RCRC)智能小车8(测速显示到OLED显示屏)
  • git最常用命令
  • RISC-V向量扩展与GPU协处理:开源加速器设计新范式——对比NVDLA与香山架构的指令集融合方案
  • 汽车 CDC威胁分析与风险评估
  • HTTP 请求中的 `Content-Type` 类型详解及前后端示例(Vue + Spring Boot)