目录
前言
对正则表达式不熟悉,目前用到的地方也不多.但是偶尔学习过程中遇到了会阻碍自己的理解.所以打算把正则表达式的基础用法总结下.
说明
1.本文参考了下面的文章: 系统地学习正则表达式
2.测试正则语法的网站: regex101
正文
文本字符匹配
Regular expression |
Input |
OutPut |
string |
This is a string. |
string |
匹配任意单个字符
Regular expression |
Input |
OutPut |
a.c |
abc |
abc |
a.c |
abbc |
not match |
a.c |
a5c |
a5c |
匹配特殊字符(需要转义)
Regular expression |
Input |
OutPut |
a\.c |
a.c |
a.c |
a\.c |
abc |
not match |
a\+c |
a+c |
a+c |
a+c |
aac |
aac |
a\+c |
aac |
not match |
a\[c |
a[c |
a[c |
a[c |
a[c |
error |
a\\c |
a\c |
a\c |
a\c |
a\c |
error |
字符集合
[abc] 匹配a/b/c其中一个,取反:[^abc]
[a-z] 匹配一个小写字母,取反:[^a-z]
[0-9] 匹配一位数,相当于[0123456789],取反:[^0-9]
[0-9a-zA-Z] 与上面类似,[]中可以存在多种规则
约定俗成的
元字符 |
描述 |
\d |
[0-9] |
\D |
[^0-9] |
\w |
[0-9a-zA-Z_] |
\W |
[^0-9a-zA-Z_] |
\s |
[\f\n\r\t\v] |
\S |
[^\f\n\r\t\v] |
匹配次数
正则表达式 |
描述 |
Regular expression |
Input |
Output |
{1,3} |
匹配1个到3个 |
a{1,3}d |
aad |
aad |
{2} |
匹配2个 |
a{2}d |
aaad |
aad |
* |
0个到多个,同{0,} |
a*d |
addddddddddd |
ad,d,d,d,d,d,d,d,d,d,d 11种结果 |
+ |
1个到多个,同{1,} |
a+d |
addddddddddd |
ad |
字符串边界
Regular expression |
Input |
OutPut |
Describe |
^begin |
begin and end |
begin |
表示以begin开头的字符串 |
^begin |
from begin to end |
not match |
begin不在字符串的开始就匹配不上 |
end$ |
begin and end |
end |
表示以end结束的字符串 |
end$ |
begin and end ... |
not match |
end不在字符串的结束就匹配不上 |
注意 ^[] 和 [^] 的区别
^[0-9] 表示字符串是以数字开始的
[^0-9] 表示一个不是数字的字符
Regular expression |
Input |
OutPut |
Describe |
^[0-9a-zA-Z]{4,}$ |
12cd5678 |
12cd5678 |
表示由数字和字母组成的字符串,且字符串的长度>=4 |
^[0-9a-zA-Z]{4,}$ |
12cd5>678 |
not match |
有其他字符> |
^[0-9a-zA-Z]{4,}$ |
a5c |
not match |
不足4位> |
贪婪词汇
贪婪匹配:正则表达式总是寻找最大的匹配,而不是最小的
贪婪量词 |
非贪婪量词 |
* |
*? |
+ |
+? |
{n,} |
{n,}? |
贪婪版本 |
Input |
Output |
Describe |
s.*g |
xiao song xiao song |
song xiao song |
s和g之间有0到多个任意字符 |
非贪婪版本 |
Input |
Output |
s.*?g |
xiao song xiao song |
song,song |