正则表达式匹配详解:实例与技巧
正则表达式(Regular Expression,常简写为 regex 或 regexp)是计算机科学中的一个强大工具。它是一种用于描述、匹配和操作字符串的模式。无论你是在处理用户输入、解析日志文件,还是在海量文本中查找特定信息,正则表达式都能极大地提高你的工作效率。
本文将从基础语法讲起,逐步深入到高级技巧,并通过丰富的实例让你彻底掌握正则表达式的精髓。
1. 什么是正则表达式?
简单来说,正则表达式就是一个“规则字符串”,它定义了你想要查找的文本模式。
例如,正则表达式 \d+ 可以匹配一个或多个数字。在文本 “我的电话是 13800138000” 中,它就能成功匹配到 “13800138000”。
2. 基础语法与核心元字符
元字符是正则表达式中具有特殊意义的字符,它们是构建复杂模式的基础。
2.1 常用字符匹配
| 元字符 | 描述 | 示例 | 匹配 |
|---|---|---|---|
. |
匹配除换行符 \n 之外的任意单个字符 |
a.c |
abc, aec, a_c |
\d |
匹配任意一个数字 (等同于 [0-9]) |
\d{3} |
123, 987 |
\D |
匹配任意一个非数字字符 | \D |
a, _, |
\w |
匹配字母、数字或下划线 (等同于 [a-zA-Z0-9_]) |
\w+ |
hello_world123 |
\W |
匹配非字母、数字或下划线的字符 | \W |
!, @, |
\s |
匹配任意空白符(空格、制表符、换行符等) | hello\sworld |
hello world |
\S |
匹配任意非空白符 | \S+ |
user-123 |
[...] |
匹配方括号中包含的任意一个字符 | [aeiou] |
a, e |
[^...] |
匹配不在方括号中包含的任意一个字符 (取反) | [^0-9] |
a, b (非数字) |
2.2 量词(Quantifiers)
量词用于指定一个模式需要匹配的次数。
| 量词 | 描述 | 示例 | 匹配 |
|---|---|---|---|
* |
匹配前一个元素 0 次或多次 | go*gle |
ggle, google, gooogle |
+ |
匹配前一个元素 1 次或多次 | go+gle |
gogle, google |
? |
匹配前一个元素 0 次或 1 次 | colou?r |
color, colour |
{n} |
匹配前一个元素恰好 n 次 | \d{4} |
2024 |
{n,} |
匹配前一个元素至少 n 次 | \d{2,} |
12, 123, 1234 |
{n,m} |
匹配前一个元素至少 n 次,至多 m 次 | \w{3,5} |
abc, abcd, abcde |
2.3 边界匹配(Anchors)
边界匹配用于指定模式在字符串中的位置。
| 边界符 | 描述 | 示例 | 匹配 |
|---|---|---|---|
^ |
匹配字符串的开始 | ^start |
start of the line 中的 start |
$ |
匹配字符串的结束 | end$ |
the line is end 中的 end |
\b |
匹配单词边界(单词与空格/标点之间) | \bcat\b |
a cat 中的 cat (不匹配 category) |
\B |
匹配 |