当前位置: 首页 > 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.lryc.cn/news/616194.html

相关文章:

  • 零基础学Java第三讲---运算符
  • CSS优先级、HTTP响应状态码
  • ​Microsoft Store 离线下载软件
  • Unity笔记(四)——Camera、碰撞检测函数、刚体加力、音频
  • 电脑使用“碎片整理”程序的作用
  • Java I/O 流:从字节流到 NIO 的进化与应用
  • idea中使用maven造成每次都打印日志
  • IDEA官网下载及其他版本软件下载地址
  • Ubuntu 安装 Elasticsearch
  • 【0基础PS】PS工具详解--缩放工具
  • 【python】import与include的区别
  • 运维学习Day20——MariaDB数据库管理
  • 生产环境中Spring Cloud Sleuth与Zipkin分布式链路追踪实战经验分享
  • LeetCode_哈希表
  • 【代码随想录day 16】 力扣 112. 路径总和
  • Java学习第一百二十三部分——HTTP/HTTPS
  • 一文学习nacos和openFeign
  • MariaDB 数据库管理
  • 【牛客刷题】小红的项链(字节跳动面试题)
  • Graham 算法求二维凸包
  • OpenEnler等Linux系统中安装git工具的方法
  • WGS84 与 ITRF 坐标系的差异及转换算法详解
  • Linux | i.MX6ULL移植 ssh 服务到开发板(第十五章)
  • 苍穹外卖-Day1 | 环境搭建、nginx、git、令牌、登录加密、接口文档、Swagger
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DHCP欺骗、DHCP饿死)
  • 【接口自动化】初识pytest,一文讲解pytest的安装,识别规则以及配置文件的使用
  • YOLOv11 模型轻量化挑战:突破边缘计算与实时应用的枷锁
  • Ollama+Deepseek+Docker+RAGFlow打造自己的私人AI知识库
  • C语言深度剖析
  • Docker 详细介绍及使用方法