正则表达式1
正则表达式的基本语法
| 语法符号 | 说明 | 例子 | 匹配 |
|---|---|---|---|
. |
匹配任意单个字符(除了换行符) | a.b |
acb、a1b |
\d |
匹配任意数字,等价于 [0-9] |
\d{3} |
123、456 |
\w |
匹配字母、数字、下划线,等价于 [a-zA-Z0-9_] |
\w+ |
abc_123 |
\s |
匹配任何空白字符(空格、制表符等) | \s |
空格、\t |
/g |
匹配所有 | "abcabc".match(/a/g) |
["a", "a"] |
^ |
匹配字符串开头 | ^Hello |
Hello world |
$ |
匹配字符串结尾 | world$ |
Hello world |
* |
匹配前面的字符零次或多次 | a* |
``, a, aaaa |
+ |
匹配前面的字符一次或多次 | a+ |
a, aaaa |
? |
匹配前面的字符零次或一次 | a? |
``, a |
{n} |
精确匹配 n 次 | a{3} |
aaa |
{n,} |
匹配至少 n 次 | a{2,} |
aa, aaa |
{n,m} |
匹配 n 到 m 次 | a{2,4} |
aa, aaa, aaaa |
[] |
字符集合,匹配方括号内任意一个字符 | [abc] |
a, b, c |
[^] |
不匹配括号内的任何字符 | "abcXYZ".match(/[^a-c]/g) |
["X", "Y", "Z"] |
| ` | ` | 或操作 | `a |
3. 分组与捕获
-
分组
( ... )
将多个字符组合成一个单元,方便整体匹配和提取。 -
非捕获分组
(?: ... )
用于分组但不捕获内容,减少内存开销。 -
捕获组编号
按左括号出现顺序编号,从1开始,通过编程语言接口获取匹配内容。
示例:匹配日期格式 YYYY-MM-DD
(\d{4})-(\d{2})-(\d{2})
匹配 2024-06-15,分别捕获年、月、日。
4. 常用特殊字符转义
正则表达式中一些字符有特殊含义,如 . ^ $ * + ? { } [ ] \ | ( ),如果要匹配这些字符本身,需使用反斜杠 \ 进行转义。
例如,匹配字符串 a+b:
a\+b
5. 零宽断言(Lookahead 和 Lookbehind)
-
正向预查(Lookahead)
(?=...)
匹配后面跟着某模式的字符串,但不消耗字符。 -
负向预查
(?!...)
匹配后面不跟某模式的字符串。 -
正向回顾(Lookbehind)
(?<=...)
匹配前面是某模式的字符串。 -
负向回顾
(?<!...)
示例: 匹配后面跟着 ing 的单词 play:
play(?=ing)
6. 实战示例
6.1 验证邮箱地址
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
^开头[a-zA-Z0-9_.+-]+用户名部分@符号[a-zA-Z0-9-]+域名部分\.点符号[a-zA-Z0-9-.]+顶级域名部分$结尾
6.2 提取网页中的所有链接
<a\s+(?:[^>]*?\s+)?href="([^"]*)"
- 匹配
<a>标签中href属性的链接地址。
7. 常用正则表达式工具和资源
- Regex101 — 在线测试和调试正则表达式
- RegExr — 交互式学习和测试工具
- Regular-Expressions.info — 权威教程和资料