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

正则表达式规则

正则元字符和特性

字符匹配

  • 普通字符:普通字符按照字面意义进行匹配,例如匹配字母 "a" 将匹配到文本中的 "a" 字符。
  • 元字符:元字符具有特殊的含义,例如\d匹配任意数字字符,\w匹配任意字母数字字符,.匹配任意字符(除了换行符)等。

量词

  • *:匹配前面的模式零次或多次。
  • +:匹配前面的模式一次或多次。
  • ?:匹配前面的模式零次或一次。
  • {n}:匹配前面的模式恰好 n 次。
  • {n,}:匹配前面的模式至少 n 次。
  • {n,m}:匹配前面的模式至少 n 次且不超过 m 次。

字符类

  • [ ]:匹配括号内的任意一个字符。例如,[abc]匹配字符 "a"、"b" 或 "c"。
  • [^ ]:匹配除了括号内的字符以外的任意一个字符。例如,[^abc]匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。

边界匹配

  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • \b:匹配单词边界。
  • \B:匹配非单词边界。

分组和捕获

  • ( ):用于分组和捕获子表达式。
  • (?: ):用于分组但不捕获子表达式。

特殊字符

  • \:转义字符,用于匹配特殊字符本身。
  • .:匹配任意字符(除了换行符)。
  • |:用于指定多个模式的选择。

一、什么是正则表达式?

正则表达式(Regular Expression)是一种用于匹配、查找和替换文本中特定字符模式的工具。它通过一套特殊的语法规则,能够灵活地描述字符串模式,广泛应用于数据验证、文本处理、爬虫等场景。

二、核心语法速查表

1. 基本匹配符

符号说明示例
abc精确匹配字符串"abc""abc"匹配 "abc"
.匹配除换行符外的任意单个字符a.c匹配 "abc", "adc"
\转义字符\.匹配点号本身

2. 字符类

符号说明示例
[abc]匹配a、b或c中的任意一个[aeiou]匹配任意元音
[^abc]匹配除a、b、c外的任意字符[^0-9]匹配非数字
[a-z]匹配a到z范围内的任意字符[A-Za-z]匹配任意字母
\d匹配数字,等价于[0-9]\d\d匹配两位数字
\D匹配非数字\D+匹配连续的非数字
\w匹配单词字符(字母、数字、下划线)\w+匹配一个单词
\W匹配非单词字符\W匹配空格或标点
\s匹配空白字符(空格、制表符等)\s+匹配连续空白
\S匹配非空白字符\S{3}匹配三个非空白字符

3. 量词

符号说明示例
*匹配前面的子表达式0次或多次ab*c匹配 "ac", "abc", "abbc"
+匹配前面的子表达式1次或多次ab+c匹配 "abc", "abbc"
?匹配前面的子表达式0次或1次colou?r匹配 "color", "colour"
{n}精确匹配n次\d{4}匹配4位数字
{n,}至少匹配n次a{2,}匹配至少两个a
{n,m}匹配n到m次\d{2,4}匹配2-4位数字

4. 位置锚点

符号说明示例
^匹配字符串的开始位置^Hello匹配以Hello开头的字符串
$匹配字符串的结束位置end$匹配以end结尾的字符串
\b匹配单词边界\bword\b精确匹配单词"word"
\B匹配非单词边界\Bword匹配作为单词一部分的"word"

5. 分组与捕获

符号说明示例
(abc)捕获分组(ab)+匹配 "abab"
(?:abc)非捕获分组只分组不捕获,提高性能
\1反向引用,引用第一个捕获组(a)b\1匹配 "aba"
(?<name>exp)命名捕获组(?<year>\d{4})

6. 逻辑与条件

符号说明示例
|或运算cat|dog匹配 "cat" 或 "dog"
(?=exp)正向先行断言\d+(?=元)匹配"元"前的数字
(?!exp)负向先行断言\d+(?!元)匹配后面不是"元"的数字
(?<=exp)正向后行断言(?<=¥)\d+匹配"¥"后的数字
(?<!exp)负向后行断言(?<!¥)\d+匹配前面不是"¥"的数字

三、示例

1.基础分组

(abc) # 将abc作为一个整体 (ab)+ # 匹配"ab"、"abab"、"ababab"等 (ha){3} # 匹配"hahaha"

示例:

正则: (ha){3} 匹配: "hahaha" ✓ 不匹配: "haha" ✗

2. 捕获分组(Capturing Groups)

默认情况下,括号不仅用于分组,还会捕获匹配的内容,以便后续引用。

编号捕获
(\d{4})-(\d{2})-(\d{2}) # 第1组:年份 # 第2组:月份 # 第3组:日期

应用示例(Python):

import re text = "日期:2023-12-25" pattern = r'(\d{4})-(\d{2})-(\d{2})' match = re.search(pattern, text) print(match.group(0)) # 整个匹配:2023-12-25 print(match.group(1)) # 第1组:2023 print(match.group(2)) # 第2组:12 print(match.group(3)) # 第3组:25 print(match.groups()) # 所有组:('2023', '12', '25')

3. 反向引用(Backreferences)

在同一正则表达式中引用之前捕获的组。

# 匹配重复单词 (\b\w+\b)\s+\1 # \1引用第1组捕获的内容

示例:

文本:"hello hello world" 正则:(\b\w+\b)\s+\1 匹配:"hello hello" 文本:"the the the" 正则:(\b\w+\b)(\s+\1){2} 匹配:"the the the"

断言(Assertions)

断言不匹配字符,只检查位置或条件。

2.1 先行断言(Lookahead)

检查当前位置后面是否满足条件。

正向先行断言(?=exp)后面必须跟着exp

# 匹配后面是"元"的数字 \d+(?=元) # 示例: "价格:100元" → 匹配"100" "数量:100个" → 不匹配

负向先行断言(?!exp)后面不能跟着exp

# 匹配后面不是"元"的数字 \d+(?!元) # 示例: "数量:100个" → 匹配"100" "价格:100元" → 不匹配
2.2 后行断言(Lookbehind)

检查当前位置前面是否满足条件。

正向后行断言(?<=exp)前面必须是exp

# 匹配前面是"¥"的数字 (?<=¥)\d+ # 示例: "价格:¥100" → 匹配"100" "价格:100元" → 不匹配

负向后行断言(?<!exp)前面不能是exp

# 匹配前面不是"¥"的数字 (?<!¥)\d+ # 示例: "价格:100元" → 匹配"100" "价格:¥100" → 不匹配
http://www.jsqmd.com/news/825969/

相关文章:

  • 团队开发中 Git flow 和 GitHub flow 有什么区别怎么选
  • 多智能体强化学习实战:从AgentGym平台到协作算法实现
  • AI Prompt 工程入门:RAG 生产级 Prompt 模板与 Java 实战
  • 本地包管理器指南:实现开发环境隔离与依赖管理的工程实践
  • 如何快速配置明日方舟自动化助手MAA:3步实现游戏效率翻倍
  • 软件测试:程序员必备的质量保障技能
  • 价签吊牌厂家哪家好?2026年精选口碑好实力强的珠宝价签牌源头厂家推荐:裕达领衔 - 栗子测评
  • 基于Arduino与Circuit Playground的智能课表提醒器硬件开发实践
  • VSCode里跑通点云转换:配置PCL环境并调试bin转pcd的C++程序(避坑指南)
  • Python在TVA系统中的核心意义(系列)
  • 化学数据格式转换不求人:手把手教你用pip和源码两种方式安装Open Babel 3.1.0
  • Qwen-Code代码生成模型实战:从部署集成到提示工程与风险规避
  • 电力设备红外图像检测数据集1114张VOC+YOLO格式
  • 开源远程光标共享工具Telecursor:低延迟实时协作的技术实现
  • 建筑理论研究卡点突破:用NotebookLM自动识别《空间的生产》与《建成环境符号学》概念映射关系(附17组可复用prompt)
  • 自动化(二)之Java自动化不同类型环境的配置浅析
  • Vite+React+TypeScript+VsCode框架实战
  • fre:ac免费音频转换器:跨平台终极指南与实用教程
  • 综合能源系统多级环式一体化设计【附代码】
  • 给老人的火车票打个折,挺好,但差了点什么
  • MySQL 配置文件(my.ini/my.cnf)核心参数详解,新手必改配置
  • 令牌管理实战:从JWT原理到token-ninja库的集成与应用
  • OpenContext开源框架:模块化设计实现AI上下文管理新范式
  • 甘蓝中耕除草机器人结构与运动控制【附代码】
  • 【flutter for open harmony】第三方库Flutter 鸿蒙版 心情日记 实战指南(适配 1.0.0)✨
  • 为 OpenClaw 智能体框架配置 Taotoken 作为模型供应商的要点
  • DeepSeek在MMLU基准测试中狂揽86.7分:这3个被99%开发者忽略的推理优化技巧,立竿见影!
  • 基于Gemini CLI的深度研究工具:命令行AI助手的架构与实战
  • 【DeepSeek Chat功能测试全链路指南】:20年AI工程师亲测的7大核心场景验证法
  • 训练篇第6节:NCCL(三)——性能调优:NVLink vs. PCIe vs. InfiniBand