学习笔记-正则表达式 - 语法
正则表达式语法学习笔记(精简版)
一、基础元字符
| 元字符 | 描述 |
|---|---|
. | 匹配任意单个字符(除换行符外) |
\ | 转义字符,用于匹配特殊字符本身(如 \. 匹配 .) |
* | 匹配前一个字符/子表达式 0次或多次 |
+ | 匹配前一个字符/子表达式 1次或多次 |
? | 匹配前一个字符/子表达式 0次或1次 |
二、字符类
-
普通字符组
[abc]: 匹配a、b或c中的任意一个字符。[a-z]: 匹配小写字母 a 到 z 中的任意一个字符。
-
排除型字符组
[^0-9]: 匹配非数字字符。
-
预定义字符类
\d: 匹配数字(等价于[0-9])。\w: 匹配单词字符(字母、数字、下划线,等价于[a-zA-Z0-9_])。\s: 匹配空白字符(空格、制表符、换行符等)。
三、量词
| 量词 | 描述 | 示例 |
|---|---|---|
{n} | 精确匹配 n 次 | a{3} → aaa |
{n,} | 至少匹配 n 次 | \d{2,} → 两位及以上数字 |
{n,m} | 匹配 n 到 m 次 | a{2,4} → aa, aaa, aaaa |
| 贪婪模式 | 默认尽可能多匹配(如 .*) | |
| 非贪婪模式 | 在量词后加 ?(如 .*?) |
四、分组与捕获
-
分组
(exp): 将子表达式exp分组,可用于逻辑操作或量词控制。- 示例:
(ab)+→ababab。
-
捕获与非捕获
- 默认分组为捕获组(存储匹配结果)。
- 非捕获组:
(?:exp)(仅分组,不捕获)。
-
反向引用
- 使用
\1,\2等引用分组内容。 - 示例:
(\w+)\s+\1→ 匹配重复单词(如hello hello)。
- 使用
五、边界匹配
| 符号 | 描述 | 示例 |
|---|---|---|
^ | 匹配字符串开始 | ^Hello → 以 Hello 开头 |
$ | 匹配字符串结束 | world$ → 以 world 结尾 |
\b | 匹配单词边界 | \bcat\b → 匹配独立单词 "cat" |
六、选择结构
|: 逻辑“或”操作。- 示例:
cat|dog→ 匹配cat或dog。
- 示例:
七、修饰符(Flags)
| 修饰符 | 描述 | 常见语言支持 |
|---|---|---|
i | 不区分大小写 | JavaScript/Python/Java |
g | 全局匹配(查找所有结果) | JavaScript |
m | 多行模式(^ 和 $ 匹配每行的首尾) | Python/JavaScript |
八、应用场景示例
-
邮箱验证
▼regex复制代码^[\w.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}$ -
提取电话号码
▼regex复制代码(\d{3})-(\d{8}) # 匹配格式如 010-12345678 -
HTML标签过滤
▼regex复制代码<[^>]+> # 匹配所有HTML标签
九、注意事项
-
性能优化
- 避免过度使用贪婪量词(如
.*),防止回溯爆炸。
- 避免过度使用贪婪量词(如
-
可读性
- 复杂正则可拆分为多行并添加注释(部分语言支持)。
-
兼容性
- 不同编程语言的正则实现可能略有差异(如修饰符名称)。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论

