正则表达式完全指南

正则表达式完全指南

正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本匹配和处理工具。它使用特定的语法规则来描述字符串的匹配模式,广泛应用于文本搜索、替换和数据验证等场景。

1. 基础语法

1.1 字符匹配

  • `.` - 匹配任意单个字符(除换行符外)

  • `\d` - 匹配任意数字(0-9)

  • `\D` - 匹配任意非数字

  • `\w` - 匹配字母、数字、下划线

  • `\W` - 匹配非字母、数字、下划线

  • `\s` - 匹配任意空白字符(空格、制表符、换行符)

  • `\S` - 匹配任意非空白字符

1.2 数量限定符

  • `*` - 匹配前面的表达式 0 次或多次

  • `+` - 匹配前面的表达式 1 次或多次

  • `?` - 匹配前面的表达式 0 次或 1 次

  • `{n}` - 精确匹配 n 次

  • `{n,}` - 匹配至少 n 次

  • `{n,m}` - 匹配 n 到 m 次

1.3 位置匹配

  • `^` - 匹配行的开始

  • `$` - 匹配行的结束

  • `\b` - 匹配单词边界

  • `\B` - 匹配非单词边界

2. 高级语法

2.1 字符类

  • `abc` - 匹配方括号中的任意一个字符

  • `\^abc` - 匹配除了方括号中字符的任意字符

  • `a-z` - 匹配 a 到 z 的任意小写字母

  • `A-Z` - 匹配 A 到 Z 的任意大写字母

  • `0-9` - 匹配任意数字

2.2 分组和引用

  • `(pattern)` - 捕获组,可以通过 \1, \2 等引用

  • `(?:pattern)` - 非捕获组

  • `(?=pattern)` - 正向预查

  • `(?!pattern)` - 负向预查

  • `(?<=pattern)` - 正向后查

  • `(?<!pattern)` - 负向后查

2.3 或运算

  • `|` - 匹配左边或右边的表达式

3. 常用实例

3.1 验证常见格式

```regex

电子邮件

^\\w-+(\.\\w-+)*@\\w-+(\.\\w-+)+$

手机号码(中国)

^13-9\d{9}$

身份证号(中国)

^1-9\d{5}(19|20)\d{2}(01-9|10-2)(01-9|12\d|301)\d{3}\\dX$

日期格式(YYYY-MM-DD)

^\d{4}-(01-9|10-2)-(01-9|12\d|301)$

URL

^(https?:\/\/)?(\\da-z\\.-+)\.(a-z\\.{2,6})(\\/\\w \\.-*)*\/?$

```

3.2 文本处理示例

```regex

提取HTML标签

<\^\>+>

匹配双字节字符(包括汉字)

\^\\x00-\\xff

删除多余空格

\s{2,}

提取引号中的内容

"\^"*"

```

4. 使用技巧

4.1 性能优化

  1. 避免过度使用贪婪匹配

  2. 合理使用非捕获组 (?:)

  3. 尽量使用具体的字符类而不是通配符

  4. 避免过度使用回溯

4.2 常见陷阱

  1. 贪婪匹配vs懒惰匹配
  • 贪婪匹配:`.*`、`.+`

  • 懒惰匹配:`.*?`、`.+?`

  1. 特殊字符转义
  • 需要转义的字符:`. * + ? ^ $ ( ) { } | \ /`

  • 使用 `\` 进行转义

  1. 环视断言使用注意事项
  • 环视不消耗字符

  • 环视只用于判断位置

5. 在不同编程语言中的使用

5.1 JavaScript

```javascript

// 创建正则表达式

let regex1 = /pattern/flags;

let regex2 = new RegExp('pattern', 'flags');

// 常用方法

string.match(regex) // 查找匹配项

string.replace(regex) // 替换匹配项

regex.test(string) // 测试是否匹配

regex.exec(string) // 执行匹配

```

5.2 Python

```python

import re

常用方法

re.match(pattern, string) # 从开始位置匹配

re.search(pattern, string) # 搜索整个字符串

re.findall(pattern, string) # 查找所有匹配

re.sub(pattern, repl, string)# 替换匹配项

```

6. 调试与测试

6.1 在线工具推荐

  1. regex101.com - 实时测试和调试

  2. regexr.com - 交互式学习

  3. debuggex.com - 可视化展示

6.2 测试要点

  1. 边界情况测试

  2. 特殊字符处理

  3. 性能测试

  4. 多语言环境测试

总结

正则表达式是一个强大的文本处理工具,掌握它可以大大提高文本处理效率。关键是要:

  1. 理解基本语法和特殊字符的含义

  2. 多练习,积累常用表达式

  3. 注意性能优化

  4. 考虑可维护性

  5. 适当使用在线工具辅助开发和调试

记住:编写正则表达式时应该遵循"简单够用"的原则,过于复杂的正则表达式往往会带来维护困难和性能问题。

相关推荐
想会飞的蒲公英10 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel10 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记11 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
CCPC不拿奖不改名11 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code11 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook11 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
我的xiaodoujiao14 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_4080996714 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
去码头整点薯条ing15 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
赶紧写完去睡觉16 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda