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

正则表达式常用语法参考

正则表达式常用语法参考

目录

  • 基础概念
  • 字符类
  • 量词
  • 位置锚点
  • 分组和引用
  • 转义字符
  • 修饰符
  • 常用模式
  • 实际应用示例

基础概念

正则表达式(Regular Expression,简称Regex)是一种用于匹配字符串模式的工具,广泛应用于文本搜索、替换、验证等场景。

基本语法结构

/pattern/flags
  • pattern: 匹配模式
  • flags: 修饰符(可选)

字符类

普通字符

直接匹配字符本身

a       # 匹配字母 'a'
123     # 匹配数字 '123'

特殊字符

需要转义的字符:^ $ . * + ? { } [ ] \ | ( )

字符集合

[abc]       # 匹配 a、b 或 c 中的任意一个
[^abc]      # 匹配除了 a、b、c 之外的任意字符
[a-z]       # 匹配小写字母 a 到 z
[A-Z]       # 匹配大写字母 A 到 Z
[0-9]       # 匹配数字 0 到 9
[a-zA-Z]    # 匹配任意字母
[a-zA-Z0-9] # 匹配字母和数字

预定义字符类

.           # 匹配任意字符(除换行符外)
\d          # 匹配数字 [0-9]
\D          # 匹配非数字 [^0-9]
\w          # 匹配单词字符 [a-zA-Z0-9_]
\W          # 匹配非单词字符 [^a-zA-Z0-9_]
\s          # 匹配空白字符 [\t\n\r\f\v]
\S          # 匹配非空白字符 [^\t\n\r\f\v]

量词

基本量词

*           # 匹配前面的元素 0 次或多次
+           # 匹配前面的元素 1 次或多次
?           # 匹配前面的元素 0 次或 1 次
{n}         # 匹配前面的元素恰好 n 次
{n,}        # 匹配前面的元素至少 n 次
{n,m}       # 匹配前面的元素 n 到 m 次

贪婪与非贪婪

*           # 贪婪匹配(默认)
*?          # 非贪婪匹配
+           # 贪婪匹配
+?          # 非贪婪匹配
?           # 贪婪匹配
??          # 非贪婪匹配

位置锚点

行首行尾

^           # 匹配行首
$           # 匹配行尾
\A          # 匹配字符串开始
\Z          # 匹配字符串结束

单词边界

\b          # 匹配单词边界
\B          # 匹配非单词边界

分组和引用

分组

(abc)       # 捕获组
(?:abc)     # 非捕获组
(?<name>abc) # 命名捕获组

反向引用

\1          # 引用第一个捕获组
\2          # 引用第二个捕获组
\k<name>    # 引用命名捕获组

条件匹配

(?=abc)     # 正向先行断言
(?!abc)     # 负向先行断言
(?<=abc)    # 正向后行断言
(?<!abc)    # 负向后行断言

转义字符

常用转义

\\          # 反斜杠
\.          # 点号
\*          # 星号
\+          # 加号
\?          # 问号
\{          # 左大括号
\}          # 右大括号
\[          # 左方括号
\]          # 右方括号
\(          # 左圆括号
\)          # 右圆括号
\^          # 脱字符
\$          # 美元符号
\|          # 竖线

特殊转义

\n          # 换行符
\r          # 回车符
\t          # 制表符
\f          # 换页符
\v          # 垂直制表符
\xhh        # 十六进制字符
\uhhhh      # Unicode 字符

修饰符

常用修饰符

i           # 忽略大小写
g           # 全局匹配
m           # 多行模式
s           # 单行模式(点号匹配换行符)
u           # Unicode 模式
y           # 粘性匹配

常用模式

邮箱验证

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

手机号验证(中国大陆)

^1[3-9]\d{9}$

身份证号验证(中国大陆)

^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$

URL 验证

^https?://[^\s/$.?#].[^\s]*$

密码强度验证

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

日期格式验证(YYYY-MM-DD)

^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$

实际应用示例

1. 提取邮箱地址

const text = "联系我:user@example.com 或 admin@test.org";
const emailRegex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
const emails = text.match(emailRegex);
// 结果: ["user@example.com", "admin@test.org"]

2. 验证密码强度

const password = "MyPass123!";
const strongPasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
const isValid = strongPasswordRegex.test(password);
// 结果: true

3. 格式化电话号码

const phone = "13812345678";
const formatted = phone.replace(/(\d{3})(\d{4})(\d{4})/, "$1-$2-$3");
// 结果: "138-1234-5678"

4. 提取HTML标签内容

const html = "<div>Hello World</div><p>Test</p>";
const contentRegex = /<[^>]*>([^<]*)<\/[^>]*>/g;
const contents = [];
let match;
while ((match = contentRegex.exec(html)) !== null) {contents.push(match[1]);
}
// 结果: ["Hello World", "Test"]

5. 验证信用卡号(Luhn算法)

function validateCreditCard(cardNumber) {const cleanNumber = cardNumber.replace(/\D/g, '');if (!/^\d{13,19}$/.test(cleanNumber)) return false;let sum = 0;let isEven = false;for (let i = cleanNumber.length - 1; i >= 0; i--) {let digit = parseInt(cleanNumber[i]);if (isEven) {digit *= 2;if (digit > 9) digit -= 9;}sum += digit;isEven = !isEven;}return sum % 10 === 0;
}

常用工具和资源

在线测试工具

  • Regex101 - 功能强大的正则表达式测试工具
  • RegExr - 学习、构建和测试正则表达式
  • RegexPal - 简单的正则表达式测试工具

编程语言支持

  • JavaScript: 内置支持,使用 RegExp 对象
  • Python: re 模块
  • Java: java.util.regex
  • C#: System.Text.RegularExpressions 命名空间
  • PHP: preg_* 函数系列

学习资源

  • 正则表达式30分钟入门教程
  • MDN Web Docs - 正则表达式
  • 菜鸟教程 - 正则表达式

注意事项

  1. 性能考虑: 复杂的正则表达式可能影响性能,特别是在大文本中
  2. 可读性: 过于复杂的正则表达式难以维护,建议适当拆分
  3. 边界情况: 测试各种边界情况,确保正则表达式的准确性
  4. 语言差异: 不同编程语言的正则表达式语法可能有细微差别
  5. 安全性: 避免使用用户输入直接构建正则表达式,防止正则表达式注入攻击

本文档提供了正则表达式的基础语法和常用模式,建议在实际使用中根据具体需求进行调整和优化。

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

相关文章:

  • es查询小结
  • 机械学习--DBSCAN 算法(附实战案例)
  • 本地WSL部署接入 whisper + ollama qwen3:14b 总结字幕校对增强版
  • C++基础语法积累
  • Rust进阶-part6-宏
  • LLaMA-Adapter V2 Parameter-Efficient Visual Instruction Model
  • Shell脚本-数组定义
  • Android 四大布局:使用方式与性能优化原理
  • ELK分布式日志采集系统
  • 手写 Spring
  • 《Go小技巧易错点100例》第三十七篇
  • 创建降阶模型用于搅拌槽中的涡流预测
  • 线性代数1000题学习笔记
  • 【机器学习深度学习】Embedding 模型详解:从基础原理到实际应用场景
  • NLP——TF-IDF算法
  • 《从零构建大语言模型》学习笔记4,注意力机制1
  • ADK(Agent Development Kit)【2】调用流程详解
  • 【东枫科技】 FR2 Massive MIMO 原型验证与开发平台,8*8通道
  • NLP学习开始-02逻辑回归
  • 【软件测试】性能测试 —— 工具篇 JMeter 介绍与使用
  • C++高频知识点(十九)
  • 【AI论文】LongVie:多模态引导的可控超长视频生成
  • 嵌套-列表存储字典,字典存储列表,字典存储字典
  • InfluxDB 在物联网设备数据采集与分析中的应用(一)
  • Python爬虫-爬取政务网站的文档正文内容和附件数据
  • 如何解决线上gc频繁的问题?
  • 在Ansys Simplorer中设计三相逆变器,并与Maxwell FEA耦合,实现160kW PMSM
  • Day 10: Transformer完整架构详解 - 从位置编码到编解码器的全面剖析
  • Excel常用功能函数
  • 重学React(四):状态管理二