📌 目录:

  1. 什么是正则表达式?
  2. 正则表达式的基本语法
  3. 字符类和元字符
  4. 量词和匹配规则
  5. 分组与回溯引用
  6. 常见正则表达式示例
  7. 如何在编程语言中使用正则表达式
  8. 正则表达式的优化技巧
  9. 参考资料

1. 什么是正则表达式?

正则表达式(Regular Expression,简称 Regex)是一种模式匹配技术,主要用于:
字符串搜索(如查找包含某个单词的文本)
文本替换(如替换敏感词)
格式验证(如校验邮箱、手机号、日期格式)

📌 示例:

  • 正则表达式:\d{3}-\d{4}-\d{4}
  • 可匹配:123-4567-8901

2. 正则表达式的基本语法

表达式描述示例
.任意字符(除换行符)a.b 匹配 acb
^匹配行首^Hello 匹配 "Hello world"
$匹配行尾world$ 匹配 "Hello world"
\d数字(0-9)\d+ 匹配 "123"
\w字母、数字、下划线\w+ 匹配 "hello_123"
\s空格、制表符、换行符\s+ 匹配 " "

3. 字符类和元字符

表达式描述示例
[abc]匹配 abc[aeiou] 匹配元音字母
[^abc]匹配 abc[^0-9] 匹配非数字
[a-z]匹配小写字母[A-Z] 匹配大写字母
[0-9]匹配数字[1-5] 匹配 1-5
\b匹配单词边界\bcat\b 只匹配 cat

4. 量词和匹配规则

量词描述示例
*0 次或多次a* 匹配 "aaa"""
+1 次或多次a+ 匹配 "aaa",但不匹配 ""
?0 次或 1 次a? 匹配 "a"""
{n}恰好 n 次a{3} 只匹配 "aaa"
{n,}至少 n 次a{2,} 匹配 "aa" 或更多
{n,m}n 到 m 次a{2,4} 匹配 "aa""aaa""aaaa"

📌 示例:

  • colou?r 可匹配 "color""colour"? 代表 u 可有可无)
  • \d{2,4} 可匹配 121231234

5. 分组与回溯引用

表达式描述示例
(abc)捕获组(ab)+ 匹配 "abab"
(?:abc)非捕获组(?:ab)+ 仍匹配 "abab",但不存储匹配项
\1, \2回溯引用(\w+)\s\1 匹配 "hello hello"

📌 示例:

  • (\d{2})-(\d{2})-(\d{4}) 可匹配 12-05-2024,并将 12052024 分别存入分组 \1\2\3

6. 常见正则表达式示例

匹配内容正则表达式示例匹配
邮箱地址^[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}$user@example.com
手机号(中国)^1[3-9]\d{9}$13812345678
IPv4 地址`^(25[0-5]2[0-4][0-9]
URL 地址^(https?://)?(www\.)?[\w-]+(\.[\w-]+)+([/?#].*)?$https://www.example.com

7. 如何在编程语言中使用正则表达式

📌 Python

import re
pattern = r"\d+"
result = re.findall(pattern, "订单号 12345, 价格 678")
print(result)  # ['12345', '678']

📌 JavaScript

const pattern = /\d+/g;
const result = "订单号 12345, 价格 678".match(pattern);
console.log(result); // ["12345", "678"]

📌 PHP

$pattern = "/\d+/";
preg_match_all($pattern, "订单号 12345, 价格 678", $matches);
print_r($matches[0]);  // Array ( [0] => 12345 [1] => 678 )


8. 正则表达式的优化技巧

避免贪婪匹配
使用 .*? 而非 .*,减少回溯。
指定字符集
[\w.-]+ 替代 .*,限定匹配范围。
使用非捕获组
(?:abc) 避免不必要的分组存储,提高效率。


9. 参考资料

🔗 出站链接

🔗 站内链接


这样整理后,你觉得是否符合你的需求?😃