正则表达式

元字符

.:匹配任意字符除(换行符)

[]:匹配方括号中包含的任意字符(非顺序匹配)

[^]:否定字符,匹配方括号中不包含的字符

*:匹配前面的子表达式零次或多次

+:匹配前面的子表达式一次或多次

?:匹配前面的子表达式零次或一次,或指明一个非贪婪限定符

{n,m}:匹配字符至少n次,但不超过m次

(xyz):字符组,按照确切的顺序匹配字符

|:类似于逻辑运算符“或”,匹配前面的字符或后面的字符

\:转义符

^:匹配行的开始

$:匹配行的结束

举例:

is[.]:并不是is后面跟任意的一个字符,而代表is.

星号“*”表示匹配上一个匹配规则零次或多次。正则表达式“a*“表示小写字母”a”可以重复零次或者多次。但是它如果出现在字符集或者字符类之后,它表示整个字符集的重复。 例如正则表达式”[a-z]*”,表示:一行中可以包含任意数量的小写字母。

"[a-z]*" => The car parked in the garage #21

is.+d:表示is后面可以跟任意数量的字符在加上d

[a-z]{3,4}:表示匹配a-z中任意字符,长度最少为3,但不超过4,:aaaaaaa:匹配到2个,前面4个a,和后面的三个a

{2,}:匹配2个或2个以上。       {2}:匹配2个。

字符组:

(i|s|h)le:匹配ile或sle或hle

(I|i)le|nm总共四种匹配:Ile ile inm Inm

(f|c|m)at\.? 总共六种匹配:fat. cat. mat. fat cat mat

^(i|s)le:表示起始字符为i或者为s

简写

描述

.

匹配除换行符以外的任意字符

\w

匹配所有字母和数字的字符:[a-zA-Z0-9_]

\W

匹配非字母和数字的字符:[^\w]

\d

匹配数字:[0-9]

\D

匹配非数字:[^\d]

\s

匹配空格符:[\t\n\f\r\p{Z}]

\S

匹配非空格符:[^\s]

符号

描述

?=

正向先行断言   使用规则(?=...)

?!

负向先行断言   使用规则(?!…)

?<=

正向后行断言   使用规则(?<=…)

?<!

负向后行断言   使用规则(?<!…)

正向先行断言:(T|t)he(?=\sfat),表示:匹配大写字母T或小写字母t,后面跟字母h,后跟字母e。 在括号中,我们定义了正向先行断言,它会引导正则表达式引擎匹配后面跟着fatThethe

"(T|t)he(?=\sfat)" => The fat cat sat on the mat;匹配到了fat前面的空格符和The

负向先行断言:(T|t)he(?!\sfat),表示:从输入字符串中获取全部The或者the且不匹配fat前面加上一个空格字符。

"(T|t)he(?!\sfat)" => The fat cat sat on the mat;fat前面的空格符和The或the没有匹配
正向后行断言:(?<=(T|t)he\s)(fat|mat)
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.

(?<!(T|t)he\s)(cat),表示:在输入字符中获取所有不在Thethe之后的所有单词cat

"(?<!(T|t)he\s)(cat)" => The cat sat on cat.

标记

标记也称为修饰符,因为它会修改正则表达式的输出。这些标志可以以任意顺序或组合使用,并且是正则表达式的一部分。

标记

描述

i

不区分大小写:将匹配设置为不区分大小写。

g

全局搜索:搜索整个输入字符串中的所有匹配。

m

多行匹配:会匹配输入字符串每一行。

例:

I举例:/The/gi" => The fat cat sat on the mat  不区分大小写的匹配并且开启了全局搜索

g举例:g修饰符用于执行全局匹配(会查找所有匹配,不会在查找到第一个匹配时就停止)。例如正则表达式/.(at)/g,表示:除换行符之外的任意字符,后跟小写字母a,后跟小写字母t。 因为我们在正则表达式的末尾使用了g标记,它会从整个输入字符串中找到每个匹配项。

".(at)" => The fat cat sat on the mat. 只匹配到了第一个字符串
"/.(at)/g" => The fat cat sat on the mat. 开启全局搜索匹配到了四个字符串
/.at(.)?$/gm,表示:小写字母a,后跟小写字母t,匹配除了换行符以外任意字符零次或一次。而且因为m标记,现在正则表达式引擎匹配字符串中每一行的末尾。
"/.at(.)?$/gm" => The fat
cat sat
on the mat.

常用正则表达式:

正整数:^\d+$

负整数:^-\d+$

电话号码:^+?[\d\s]{3,}$

整数:^-?\d+$

用户名:^[\w\d_.]{4,16}$

字母数字字符:^[a-zA-Z0-9]*$

带空格的字母数字字符:^[a-zA-Z0-9 ]*$

密码:^(?=^.{6,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$

电子邮件:^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$

IPv4 地址^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))*$

小写字母:^([a-z])*$

大写字母:^([A-Z])*$

网址:^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$

日期(MM/DD/YYYY):^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}$

日期(YYYY/MM/DD):^(19|20)?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])$

正则引擎分为两种

DFA:从起始状态开始,一个字符一个字符输入串,并根据正则来一步步确定至下一个转移状态,直到匹配不上或走完整个输入

NFA:从起始状态,一个字符一个字符地读取输入串,并与正则表达式进行匹配,如果匹配不上,则进行回溯,尝试其他状态(可利用回溯绕过某些安全限制)

练习:

利用断言实现密码限制,必须出现大小写字母,字符,数字总共16位,首字母大写

^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9])).{16}$

正则表达式 java table 正则表达式.*什么意思_python

 

成功匹配