正则表达式

一,正则表达式(Regular Expression)概念

正则表达式是用于描述、匹配、查找及替换一串字符模板的字符串。在编程中,它常用于处理文本数据,如验证用户输入、搜索特定模式的文本等。

二,元字符(Metacharacters)

元字符是正则表达式中具有特殊含义的字符,它们不表示字符本身的字面意义,而是用于指定一个位置、一个条件或字符集合中的一个元素。常见的元字符有:

元字符 匹配内容 说明
. 除去换行符以外的任意字符 匹配除了换行符(\n、\r 等)之外的任何单个字符
\w 匹配所有的普通字符(数字、字母、下划线) 等同于 [a-zA-Z0-9_]
\s 匹配任意的空白字符 包括空格、制表符、换页符等空白字符
\d 匹配数字 等同于 [0-9]
\n 匹配一个换行符 匹配行尾符,常用于多行文本中
\t 匹配一个制表符 匹配水平制表符
\b 匹配一个单词边界 并非单词的结尾,而是单词与非单词字符之间的边界
^ 匹配字符串的开始位置 在多行模式中,也匹配每一行的开始
$ 匹配字符串的结束位置 在多行模式中,也匹配每一行的结束
\W 匹配非普通字符(非数字、非字母、非下划线) 等同于 [^a-zA-Z0-9_]
\D 匹配非数字 等同于 [^0-9]
\S 匹配非空白字符 匹配除了空白字符之外的任何字符
`a b` 匹配字母a或b
() 正则表达式分组 匹配括号内的表达式,并捕获匹配的文本(如果需要的话),可以用于引用、反向引用等
[...] 匹配字符组中的字符 匹配方括号中列出的任意单个字符
[^...] 匹配除了字符组中的字符以外的所有字符 匹配不在方括号中列出的任何单个字符

三,量词(Quantifiers)

量词用于指定前面的子表达式可以出现的次数。常见的量词有:

  • *:表示前面的子表达式可以出现零次或多次。
  • +:表示前面的子表达式必须出现至少一次。
  • ?:表示前面的子表达式可以出现零次或一次。
  • {n}:表示前面的子表达式必须出现 n 次。
  • {n,}:表示前面的子表达式至少出现 n 次。
  • {n,m}:表示前面的子表达式至少出现 n 次,但不超过 m 次。

四,字符组(Character Sets)

字符组是用方括号[]括起来的一组字符,用于匹配其中任意一个字符。例如:

  • [abc]:匹配任意一个字符,该字符是 a、b 或 c。
  • [0-9]:匹配任意一个数字,等价于 [0123456789]。
  • [a-z]:匹配任意一个小写字母。
  • [A-Z]:匹配任意一个大写字母。
  • [^xyz]:匹配任意一个不在方括号内的字符。

五,贪婪模式与非贪婪模式(Greedy vs Lazy)

  • 贪婪模式(Greedy):正则表达式默认采用贪婪模式,即尽可能多地匹配字符。例如,.*b 匹配以任意字符开头,以 b 结尾的字符串,它会尽可能多地匹配前面的字符。
  • 非贪婪模式(Lazy 或 Reluctant):非贪婪模式是指尽可能少地匹配字符。在量词后面加上 ? 就可以将贪婪模式变成非贪婪模式。例如,.*?b 会尽可能少地匹配前面的字符,直到遇到 b。

六,转义(Escaping)

在正则表达式中,如果我们要匹配元字符本身的字面意义,就需要使用转义字符\。例如,\. 匹配的就是一个点号.本身,而不是任意字符。同样地,如果要匹配反斜杠\本身,也需要使用 \\。

注意:不同的编程语言或工具可能对正则表达式的支持有所不同,具体语法和用法需要参考相关文档。

相关推荐
吹什么轩几秒前
MySQL 内置函数全景:日期 / 字符串 / 数学 / 其他,一次讲透(附索引杀手排查)
java·数据库·面试
略略略咯咯5 分钟前
12333
java
CS创新实验室5 分钟前
改了模型,数据库为什么能自动跟上?——Django 迁移(migrations)的底层
数据库·django·sqlite
会编程的吕洞宾8 分钟前
Spring AI 语义缓存:重复提问不重复花钱
java·人工智能·后端·spring
编码追梦人15 分钟前
基于 ESP32-S3 的便携式多参数环境监护仪设计:从硬件选型到 FreeRTOS 多任务落地
数据库·单片机·嵌入式硬件·mongodb·esp32·freertos·低功耗设计
海绵宝宝转agent15 分钟前
leetcodehot100个人题解
java·笔记·学习·算法
sunburn-20 分钟前
数据库增删改查:从 SQL 基础到实践要点
java·数据库·mysql
郭小李28 分钟前
spring @RequestMapping注解
java·后端·spring
誰能久伴不乏3 小时前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite
晨曦中的暮雨9 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法