正则表达式核心元字符全解析
正则表达式的强大功能源于其元字符(特殊符号),它们赋予模式匹配灵活性和精确性。本文系统梳理常见元字符及其应用场景,附实例详解。
✨ 一、择一匹配(|
)
管道符号实现逻辑“或”操作,匹配多个模式中的任意一个:
at|home
→ 匹配at
或home
r2d2|c3po
→ 匹配r2d2
或c3po
bat|bet|bit
→ 匹配bat
/bet
/bit
注意:单字符时[ab]
等效于a|b
,但多字符需显式用|
(如ab|cd
)。
🔹 二、任意字符匹配(.
)
点号匹配除换行符 \n
外的任意单个字符:
模式 | 匹配示例 |
---|---|
f.o |
fao , f9o , f#o |
.. |
AA , ab , 12 |
转义句点:需用 \. 匹配字面句点(如 www\.google\.com )。 |
📍 三、边界匹配
定位字符串或单词的起止位置:
符号 | 功能 | 示例 |
---|---|---|
^ |
匹配字符串开头 | ^From → From xxx |
$ |
匹配字符串结尾 | /bin/*sh$ → /bin/bash |
\b |
单词边界 | \bthe\b → the (非 there ) |
\B |
非单词边界 | \Bthe\B → there 中的 the |
🧩 四、字符集([]
)
匹配括号内任意单个字符:
b[ae]t
→bat
,bet
(不匹配bt
)[cr][23][dp][o2]
→r2d2
,c3po
特殊功能:
- 范围:
[a-z]
(小写字母)、[0-9A-F]
(十六进制) - 排除:
[^aeiou]
→ 非元音字符
🔢 五、频次匹配(闭包操作符)
控制模式出现次数:
符号 | 含义 | 示例 |
---|---|---|
* |
0次或多次 | [dn]ot? → do , no , dot , not |
+ |
1次或多次 | [a-z]+\.com → google.com |
? |
0次或1次 | goo?gle → gogle , google |
{m,n} |
m到n次 | \d{3,5} → 123 , 98765 |
非贪婪模式:在闭包符后加 ? (如 .*? )匹配最少字符。 |
⚡ 六、字符集缩写
简化常见字符集表示:
符号 | 等效 | 说明 |
---|---|---|
\d |
[0-9] |
数字 |
\w |
[A-Za-z0-9_] |
字母数字下划线 |
\s |
[\t\n\r\f\v] |
空白字符 |
\D |
[^0-9] |
非数字 |
示例:
\w+-\d+
→name-123
,a-1
\d{3}-\d{2}-\d{4}
→ 社保号格式123-45-6789
🧠 七、分组提取(()
)
圆括号实现两大功能:
1. 子模式分组
(\d{3})?
→ 可选3位数字组
2. 捕获匹配内容
(\w+)-(\d+)
匹配name-123
时:- 子组1:
name
- 子组2:
123
应用场景:数据提取(如日志分析、文本清洗)。
- 子组1:
🚀 八、扩展语法(?
符号)
高级功能标记(不创建分组):
语法 | 功能 |
---|---|
(?i) |
忽略大小写 |
(?:...) |
非捕获分组 |
(?P<name>...) |
命名分组(通过名称引用) |
示例: |
(?i)python
→ 匹配Python
,PYTHON
(?P<year>\d{4})
提取命名为year
的4位数字
💎 总结
正则表达式元字符是文本处理的瑞士军刀,核心技巧包括:
- 边界定位:用
^
/$
精确锚定起止位置 - 灵活匹配:
[...]
定义字符集,|
实现逻辑或 - 频次控制:
*
/+
/?
/{}
管理重复次数 - 数据提取:
()
分组捕获关键子串
掌握这些符号的组合应用,可高效解决复杂字符串匹配、验证和提取需求。建议通过实际案例(如邮箱验证、URL解析)加深理解。