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

正则表达式常用语法参考

正则表达式常用语法参考

目录

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

基础概念

正则表达式(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.dtcms.com/a/324792.html

相关文章:

  • STM32H7 以太网配置引申的内存问题
  • A2A协议深度理解与实践
  • 解决 .NET Core 6.0 + PostgreSQL 网站首次连接缓慢问题
  • 安全生产基础知识(一)
  • 去除Edge微软浏览器与Chrome谷歌浏览器顶部出现“此版本的Windows不再支持升级Windows 10”的烦人提示
  • 深度剖析 Linux 信号:从基础概念到高级应用,全面解析其在进程管理与系统交互中的核心作用与底层运行机制
  • 【牛客刷题】REAL799 翻转01 (饿了么面试题)
  • Vue 事件冒泡处理指南:从入门到精通
  • 亚麻云之监控管家——CloudWatch基础监控
  • socket编程中系统调用send()详细讲解
  • 《算法导论》第 16 章 - 贪心算法
  • ATF(TF-A)安全通告 TFV-12(CVE-2024-5660)
  • 2025年Java 面试题及答案整理(金九银十最新版,持续更新)
  • vuhub Beelzebub靶场攻略
  • 从零学习three.js官方文档(二)——图元
  • 数据结构2线性表——顺序表
  • Python高阶
  • 企业架构之导论(1)
  • 2025华数杯比赛还未完全结束!数模论文可以发表期刊会议
  • C# 异步编程(并行循环)
  • 内存溢出的原因有哪些,如何排查线上问题?
  • 【Spring Boot刷新上下文核心流程详解】
  • UNIVERSAL IMAGE RESTORATION PRE-TRAINING VIA DEGRADATION CLASSIFICATION
  • 【Python 工具人快餐 · 第 5 份】
  • 1. 电阻选型
  • 云服务器最新版MySQL 安装步骤
  • jdk17下载安装教程【超详细图文】
  • 零基础学习jQuery第二天
  • 在windows安装colmap并在cmd调用
  • json-fortran库的使用