📌 目录:
- 基础字符匹配
- 元字符(Metacharacters)
- 字符类(Character Classes)
- 量词(Quantifiers)
- 边界匹配(Anchors)
- 分组与捕获(Groups & Capturing)
- 回溯引用(Backreferences)
- 断言(Assertions)
- 贪婪与懒惰匹配(Greedy vs. Lazy)
- 模式修饰符(Modifiers/Flags)
- 常见正则表达式示例
- 参考资料
1. 基础字符匹配
正则表达式默认逐字符匹配:
hello
仅匹配"hello"
,但不匹配"Hello"
(大小写敏感)。abc123
只能匹配完全相同的字符串。
2. 元字符(Metacharacters)
正则中的特殊字符需转义 \
,否则具有特殊含义:
. ^ $ * + ? { } [ ] \ | ( )
.
匹配除换行符外的任意字符^
匹配字符串的开始位置$
匹配字符串的结束位置
示例:
a.c
匹配 "abc"
,"a_c"
,但不匹配 "ac"
。
3. 字符类(Character Classes)
[abc]
匹配a
、b
或c
[0-9]
匹配数字(等价于\d
)\w
匹配字母、数字和下划线(等价于[a-zA-Z0-9_]
)
示例:
[A-Z][a-z]+
匹配 "Hello"
,但不匹配 "hello"
。
4. 量词(Quantifiers)
*
匹配 0 次或多次+
匹配 1 次或多次?
匹配 0 次或 1 次{n,m}
匹配n
到m
次
示例:
a{2,4}
匹配 "aa"
,"aaa"
或 "aaaa"
。
5. 边界匹配(Anchors)
^
匹配行首$
匹配行尾\b
匹配单词边界
示例:
\bhello\b
匹配 "hello"
,但不匹配 "hello123"
。
6. 分组与捕获(Groups & Capturing)
()
用于分组和捕获(?:...)
非捕获组
示例:
(\d{3})-(\d{4})
匹配 "123-4567"
,并捕获 "123"
和 "4567"
。
7. 回溯引用(Backreferences)
\1, \2, \3 ...
引用前面捕获的组
示例:
(\w+)\s\1
匹配 "hello hello"
,但不匹配 "hello world"
。
8. 断言(Assertions)
(?=...)
正向先行断言(?!...)
负向先行断言(?<=...)
正向后行断言(?<!...)
负向后行断言
示例:
\d+(?= USD)
匹配 "100 USD"
中的 100
。
9. 贪婪与懒惰匹配(Greedy vs. Lazy)
- 贪婪匹配
.*
- 懒惰匹配
.*?
示例:
<a>.*?</a>
匹配 <a>hello</a>
和 <a>world</a>
,而不是整个字符串。
10. 模式修饰符(Modifiers/Flags)
i
忽略大小写g
全局匹配m
多行模式s
让.
匹配换行符
示例:
/hello/i
匹配 "Hello"
和 "hello"
。
11. 常见正则表达式示例
匹配 Email 地址
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
匹配 IPv4 地址
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
匹配 URL
https?://[^\s/$.?#].[^\s]*
匹配电话号码
\d{3}-\d{3}-\d{4}
12. 参考资料
🔗 出站链接
🔗 站内链接
这样整理后,你觉得是否满足你的要求?😊
发表回复