正则表达式手册(Regex)
正则表达式(Regular Expressions,简称 Regex)是一种用于匹配字符串的模式。它在文本处理、数据验证和提取等方面非常强大和灵活。以下是详细的 Regex 语法手册,并附有示例说明。
基本字符匹配
- 字符:直接匹配字符本身。例如:
a匹配字符串 "a"。abc匹配字符串 "abc"。
元字符
.:匹配除换行符以外的任意单个字符。a.b匹配 "aab", "acb" 等。
\:转义字符,用于转义元字符,使其失去特殊意义。a\.b匹配 "a.b"。
字符类
[]:匹配方括号内的任意一个字符。[abc]匹配 "a", "b", "c" 中的任意一个。
[^]:匹配不在方括号内的任意一个字符。[^abc]匹配除 "a", "b", "c" 以外的任意一个字符。
- 范围:在方括号内使用
-指定字符范围。[a-z]匹配小写字母。[0-9]匹配数字。
预定义字符类
\d:匹配任何数字,相当于[0-9]。\d{3}匹配任何三位数字,如 "123"。
\D:匹配任何非数字字符,相当于[^0-9]。\D匹配 "a", "-" 等非数字字符。
\w:匹配任何字母、数字或下划线,相当于[a-zA-Z0-9_]。\w+匹配一个或多个字母、数字或下划线。
\W:匹配任何非字母、数字或下划线字符,相当于[^a-zA-Z0-9_]。\W匹配 "!", "@" 等特殊字符。
\s:匹配任何空白字符(包括空格、制表符、换行符等)。\s匹配 " ", "\t" 等。
\S:匹配任何非空白字符,相当于[^ \t\n\r\f\v]。\S匹配 "a", "1" 等非空白字符。
数量词
*:匹配前面的字符零次或多次。a*匹配 "", "a", "aa" 等。
+:匹配前面的字符一次或多次。a+匹配 "a", "aa" 等。
?:匹配前面的字符零次或一次。a?匹配 "", "a"。
{n}:匹配前面的字符恰好 n 次。a{3}匹配 "aaa"。
{n,}:匹配前面的字符至少 n 次。a{2,}匹配 "aa", "aaa" 等。
{n,m}:匹配前面的字符至少 n 次,但不超过 m 次。a{2,4}匹配 "aa", "aaa", "aaaa"。
边界匹配
^:匹配字符串的开始。^abc匹配以 "abc" 开头的字符串。
$:匹配字符串的结束。abc$匹配以 "abc" 结尾的字符串。
\b:匹配单词边界。\bword\b匹配单词 "word"。
\B:匹配非单词边界。\Bword\B匹配 "password" 中的 "word"。
分组和引用
():分组,用于提取子字符串或应用数量词。(abc)+匹配 "abc", "abcabc"。
\1,\2, ...:反向引用,用于匹配之前的捕获组。(a)(b)\1\2匹配 "abab"。
或匹配
|:匹配左边或右边的字符。a|b匹配 "a" 或 "b"。
零宽断言
(?=...):正向前瞻断言,要求接下来的字符与 ... 匹配,但不消耗这些字符。a(?=b)匹配 "a" 仅当其后跟着 "b"。
(?!...):负向前瞻断言,要求接下来的字符不与 ... 匹配。a(?!b)匹配 "a" 仅当其后不跟着 "b"。
(?<=...):正向后瞻断言,要求前面的字符与 ... 匹配,但不消耗这些字符。(?<=a)b匹配 "b" 仅当其前面是 "a"。
(?<!...):负向后瞻断言,要求前面的字符不与 ... 匹配。(?<!a)b匹配 "b" 仅当其前面不是 "a"。
贪婪与懒惰匹配
- 贪婪匹配:尽可能多地匹配字符,默认行为。
a.*b匹配 "a" 开头和 "b" 结尾的最长字符串。
- 懒惰匹配:尽可能少地匹配字符,在量词后加
?实现。a.*?b匹配 "a" 开头和 "b" 结尾的最短字符串。
示例汇总
- 匹配邮箱地址:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$- 解释:匹配类似 "example@example.com" 的邮箱地址。
- 匹配电话号码:
^\d{3}-\d{3}-\d{4}$- 解释:匹配类似 "123-456-7890" 的电话号码。
- 匹配日期(YYYY-MM-DD):
^\d{4}-\d{2}-\d{2}$- 解释:匹配类似 "2024-06-17" 的日期格式。