正则表达式语法
正则表达式(Regular Expression,简称 regex)是一种用于匹配字符串的模式。它由一系列字符和特殊符号组成,用于定义搜索模式。以下是正则表达式的基本语法规则:
1. 普通字符
- 普通字符(如字母、数字、空格等)直接匹配它们自己。
- 示例:
a
匹配字符 “a”。
- 示例:
2. 特殊字符
- 特殊字符在正则表达式中有特殊含义,需要使用反斜杠
\
进行转义。- 示例:
\.
匹配字符 “.”。
- 示例:
3. 字符类
[...]
:匹配括号内的任意一个字符。- 示例:
[abc]
匹配 “a”、“b” 或 “c”。
- 示例:
[^...]
:匹配不在括号内的任意一个字符。- 示例:
[^abc]
匹配除了 “a”、“b”、“c” 之外的任意字符。
- 示例:
[a-z]
:匹配指定范围内的任意一个字符。- 示例:
[a-z]
匹配任意小写字母。
- 示例:
4. 预定义字符类
.
:匹配除换行符以外的任意字符。\d
:匹配任意数字,等价于[0-9]
。\D
:匹配任意非数字字符,等价于[^0-9]
。\w
:匹配任意字母、数字或下划线,等价于[a-zA-Z0-9_]
。\W
:匹配任意非字母、数字或下划线的字符,等价于[^a-zA-Z0-9_]
。\s
:匹配任意空白字符(包括空格、制表符、换行符等)。\S
:匹配任意非空白字符。
5. 量词
*
:匹配前面的字符零次或多次。- 示例:
a*
匹配 “”、“a”、“aa” 等。
- 示例:
+
:匹配前面的字符一次或多次。- 示例:
a+
匹配 “a”、“aa” 等。
- 示例:
?
:匹配前面的字符零次或一次。- 示例:
a?
匹配 “” 或 “a”。
- 示例:
{n}
:匹配前面的字符恰好 n 次。- 示例:
a{2}
匹配 “aa”。
- 示例:
{n,}
:匹配前面的字符至少 n 次。- 示例:
a{2,}
匹配 “aa”、“aaa” 等。
- 示例:
{n,m}
:匹配前面的字符至少 n 次,至多 m 次。- 示例:
a{2,4}
匹配 “aa”、“aaa” 或 “aaaa”。
- 示例:
6. 边界匹配
^
:匹配字符串的开头。- 示例:
^a
匹配以 “a” 开头的字符串。
- 示例:
$
:匹配字符串的结尾。- 示例:
a$
匹配以 “a” 结尾的字符串。
- 示例:
\b
:匹配单词边界。- 示例:
\bword\b
匹配 “word” 这个单词。
- 示例:
\B
:匹配非单词边界。
7. 分组和捕获
(...)
:将括号内的内容作为一个分组,并捕获匹配的文本。- 示例:
(abc)
匹配 “abc” 并捕获。
- 示例:
(?:...)
:非捕获分组,匹配但不捕获。- 示例:
(?:abc)
匹配 “abc” 但不捕获。
- 示例:
8. 选择
|
:匹配左边或右边的表达式。- 示例:
a|b
匹配 “a” 或 “b”。
- 示例:
9. 转义字符
\
:用于转义特殊字符。- 示例:
\.
匹配字符 “.”。
- 示例:
10. 零宽断言
(?=...)
:正向先行断言,匹配后面跟着指定模式的位置。- 示例:
a(?=b)
匹配后面跟着 “b” 的 “a”。
- 示例:
(?!...)
:负向先行断言,匹配后面不跟着指定模式的位置。- 示例:
a(?!b)
匹配后面不跟着 “b” 的 “a”。
- 示例:
(?<=...)
:正向后行断言,匹配前面是指定模式的位置。- 示例:
(?<=a)b
匹配前面是 “a” 的 “b”。
- 示例:
(?<!...)
:负向后行断言,匹配前面不是指定模式的位置。- 示例:
(?<!a)b
匹配前面不是 “a” 的 “b”。
- 示例:
11. 贪婪与非贪婪匹配
- 默认情况下,量词是贪婪的,会尽可能多地匹配字符。
- 在量词后加上
?
可以使其变为非贪婪模式,尽可能少地匹配字符。- 示例:
a*?
匹配零个或多个 “a”,但尽可能少地匹配。
- 示例:
示例
- 匹配电子邮件地址:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
- 匹配 URL:
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
正则表达式的语法非常强大且灵活,掌握这些基本规则可以帮助你处理复杂的字符串匹配任务。