TheRiver | blog

You have reached the world's edge, none but devils play past here

0%

正则表达式基础

目录

前言

   对正则表达式不熟悉,目前用到的地方也不多.但是偶尔学习过程中遇到了会阻碍自己的理解.所以打算把正则表达式的基础用法总结下.

说明

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
----------- ending -----------