正则表达式(Regular Expression) 是一种用于匹配和处理文本的强大工具,它使用特定语法构成的字符串来定义搜索模式。
例如表单校验中检查输入的邮箱地址是否正确,逐个字符进行校验十分繁琐,可以使用正则表达式 ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
进行校验。
元字符 | 含义 | 示例 |
---|---|---|
. |
匹配任意一个字符(除换行符) | a.c -> abc , a1c |
^ |
匹配字符串开头 | ^abc -> abcxxxx |
$ |
匹配字符串结尾 | abc$ -> xxxxabc |
* |
匹配前一个字符出现 0次或多次 | a* -> "" , a , aa |
+ |
匹配前一个字符出现 1次或多次 | a+ -> a , aa |
? |
匹配前一个字符 0次或1次 | a? -> "" , a |
{n} |
匹配前一个字符 n 次 | a{2} -> aa |
{min, } |
匹配前一个字符 至少 min 次 | a{2,} -> aa , aaa , aaaa |
{min, max} |
匹配前一个字符 min 次至 max 次 | a{2,3} -> aa , aaa |
[] |
匹配括号内的任意一个字符 | [abc] -> a , b , c |
[^] |
匹配不在括号内的任意一个字符 | [^abc] -> d , e , f |
[-] |
表示范围 | [a-z] -> a , b , y , z |
() |
分组 | (abc)+ -> abc , abcabc |
\| |
或 | abc\|xyz -> abc , xyz |
\d |
匹配任意数字,等价于 [0-9] |
\d -> 1 , 2 , 3 |
\D |
匹配任意非数字,等价于 [^0-9] |
\D -> a , b , _ , @ |
\w |
匹配任意字母、数字、下划线,等价于 [a-zA-Z0-9_] |
\w -> a , 1 , _ |
\W |
匹配任意非字母、数字、下划线,等价于 [^a-zA-Z0-9_] |
\W -> @ , # |
\s |
匹配任意空白字符(空格,\n , \r , \t 等) |
\s -> |
\S |
匹配任意非空白字符 | \S -> a , 1 ,@ |
\b |
匹配单词边界 | \bcat\b -> This is a cat 中的 cat |
\B |
匹配非单词边界 | \Bcat\B -> scatter 中的 cat |
\r |
回车符 | |
\n |
换行符 | |
\f |
换页符 | |
\t |
制表符 | |
\v |
垂直制表符 | |
\ |
转义字符,使后面的特殊字符表示字符本身而非特殊含义 | \+ -> + |
在默认情况下,使用贪婪模式,即可以匹配不同长度时匹配最长的长度。如果追加额外的 ?
则使用懒惰模式,即可以匹配不同长度时匹配最短的长度。
贪婪模式 | 说明 | 懒惰模式 | 说明 |
---|---|---|---|
.* |
零次或多次,取最长匹配 | .*? |
零次或多次,取最短匹配 |
.+ |
一次或多次,取最长匹配 | .+? |
一次或多次,取最短匹配 |
.? |
零次或一次,取最长匹配 | .?? |
零次或一次,取最短匹配 |
.{n,m} |
n 至 m 次,取最长匹配 | .{n,m}? |
n 至 m 次,取最短匹配 |
.{n,} |
至少 n 次,取最长匹配 | .{n,m}? |
至少 n 次,取最短匹配 |