美图查-熊猫看书

正则表达式任意字符
2023年4月5日发(作者:华硕笔记本电池)

正则表达式⼤全

⼀、校验数字的表达式

1.数字:^[0-9]*$

2.n位的数字:^d{n}$

3.⾄少n位的数字:^d{n,}$

4.m-n位的数字:^d{m,n}$

5.零和⾮零开头的数字:^(0|[1-9][0-9]*)$

6.⾮零开头的最多带两位⼩数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

7.带1-2位⼩数的正数或负数:^(-)?d+(.d{1,2})?$

8.正数、负数、和⼩数:^(-|+)?d+(.d+)?$

9.有两位⼩数的正实数:^[0-9]+(.[0-9]{2})?$

10.有1~3位⼩数的正实数:^[0-9]+(.[0-9]{1,3})?$

11.⾮零的正整数:^[1-9]d*$或^([1-9][0-9]*){1,3}$或^+?[1-9][0-9]*$

12.⾮零的负整数:^-[1-9][]0-9"*$或^-[1-9]d*$

13.⾮负整数:^d+$或^[1-9]d*|0$

14.⾮正整数:^-[1-9]d*|0$或^((-d+)|(0+))$

15.⾮负浮点数:^d+(.d+)?$或^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$

16.⾮正浮点数:^((-d+(.d+)?)|(0+(.0+)?))$或^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$

17.正浮点数:^[1-9]d*.d*|0.d*[1-9]d*$或^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$

18.负浮点数:^-([1-9]d*.d*|0.d*[1-9]d*)$或^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-

9]*)))$

19.浮点数:^(-?d+)(.d+)?$或^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$

⼆、校验字符的表达式

1.汉字:^[u4e00-u9fa5]{0,}$

2.英⽂和数字:^[A-Za-z0-9]+$或^[A-Za-z0-9]{4,40}$

3.长度为3-20的所有字符:^.{3,20}$

4.由26个英⽂字母组成的字符串:^[A-Za-z]+$

5.由26个⼤写英⽂字母组成的字符串:^[A-Z]+$

6.由26个⼩写英⽂字母组成的字符串:^[a-z]+$

7.由数字和26个英⽂字母组成的字符串:^[A-Za-z0-9]+$

8.由数字、26个英⽂字母或者下划线组成的字符串:^w+$或^w{3,20}$

9.中⽂、英⽂、数字包括下划线:^[u4E00-u9FA5A-Za-z0-9_]+$

10.中⽂、英⽂、数字但不包括下划线等符号:^[u4E00-u9FA5A-Za-z0-9]+$或^[u4E00-u9FA5A-Za-z0-9]{2,20}$

11.可以输⼊含有^%&',;=?$"等字符:[^%&',;=?$x22]+12禁⽌输⼊含有~的字符:[^~x22]+

其它:

.*匹配除n以外的任何字符。

/[u4E00-u9FA5]/汉字

/[uFF00-uFFFF]/全⾓符号

/[u0000-u00FF]/半⾓符号

三、特殊需求表达式

地址:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$

2.域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

4.⼿机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$

5.电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):

^((d{3,4}-)|d{3.4}-)?d{7,8}$

6.国内电话号码、):d{3}-d{8}|d{4}-d{7}

7.⾝份证号(15位、18位数字):^d{15}|d{18}$

8.短⾝份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$或^d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

9.帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

10.密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]w{5,17}$

11.强密码(必须包含⼤⼩写字母和数字的组合,不能使⽤特殊字符,长度在8-10之间):^(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

12.⽇期格式:^d{4}-d{1,2}-d{1,2}

13.⼀年的12个⽉(01~09和1~12):^(0?[1-9]|1[0-2])$

14.⼀个⽉的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

15.钱的输⼊格式:

16.1.有四种钱的表⽰形式我们可以接受:"10000.00"和"10,000.00",和没有"分"的"10000"和"10,000":^[1-9][0-9]*$

17.2.这表⽰任意⼀个不以0开头的数字,但是,这也意味着⼀个字符"0"不通过,所以我们采⽤下⾯的形式:^(0|[1-9][0-9]*)$

18.3.⼀个0或者⼀个不以0开头的数字.我们还可以允许开头有⼀个负号:^(0|-?[1-9][0-9]*)$

19.4.这表⽰⼀个0或者⼀个可能为负的开头不为0的数字.让⽤户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下⾯我们要加的是说

明可能的⼩数部分:^[0-9]+(.[0-9]+)?$

20.5.必须说明的是,⼩数点后⾯⾄少应该有1位数,所以"10."是不通过的,但是"10"和"10.2"是通过的:^[0-9]+(.[0-9]{2})?$

21.6.这样我们规定⼩数点后⾯必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$

22.7.这样就允许⽤户只写⼀位⼩数.下⾯我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

238.1到3个数字,后⾯跟着任意个逗号+3个数字,逗号成为可选,⽽不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

24.备注:这就是最终结果了,别忘了"+"可以⽤"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在⽤函数时去掉去掉

那个反斜杠,⼀般的错误都在这⾥

⽂件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+.[x|X][m|M][l|L]$

26.中⽂字符的正则表达式:[u4e00-u9fa5]

27.双字节字符:[^x00-xff](包括汉字在内,可以⽤来计算字符串的长度(⼀个双字节字符长度计2,ASCII字符计1))

28.空⽩⾏的正则表达式:ns*r(可以⽤来删除空⽩⾏)

标记的正则表达式:<(S*?)[^>]*>.*?1>|<.*?/>(⽹上流传的版本太糟糕,上⾯这个也仅仅能部分,对于复杂的嵌套标记依旧⽆

能为⼒)

30.⾸尾空⽩字符的正则表达式:^s*|s*$或(^s*)|(s*$)(可以⽤来删除⾏⾸⾏尾的空⽩字符(包括空格、制表符、换页符等等),⾮常有

⽤的表达式)

31.腾讯QQ号:[1-9][0-9]{4,}(腾讯QQ号从10000开始)

32.中国邮政编码:[1-9]d{5}(?!d)(中国邮政编码为6位数字)

地址:d+.d+.d+.d+(提取IP地址时有⽤)

地址:((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))

-v4地址:b(?:(?: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]?)b(提取IP地址

时有⽤)

36.校验IP-v6地址:(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|

([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-

9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]

{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-

9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).)

{3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

37.⼦⽹掩码:((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))

38.校验⽇期:^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|

(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-

29)$(“yyyy-mm-dd“格式的⽇期校验,已考虑平闰年。)

39.抽取注释:

40.查找CSS属性:^s*[a-zA-Z-]+s*[:]{1}s[a-zA-Z0-9s.#]+[;]{1}

41.提取页⾯超链接:(]*)(href="https?:)((?!(?:(?:www.)?'.implode('|(?:www.)?',$follow_list).'))[^"rel="externalnofollow"

]+)"((?!.*brel=)[^>]*)(?:[^>]*)>

42.提取⽹页图⽚:<*[img][^>]*[src]*=*["']{0,1}([^"'>]*)

43.提取⽹页颜⾊代码:^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

44.⽂件扩展名效验:^([a-zA-Z]:|)([^]+)*[^:*?"<>|]+.txt(l)?$

45.判断IE版本:^.*MSIE[5-8](?:.[0-9]+)?(?!.*Trident[5-9].0).*$

元字符

描述

将下⼀个字符标记符、或⼀个向后引⽤、或⼀个⼋进制转义符。例如,“n”匹配n。“n”匹配换⾏符。序列“”匹配“”⽽“

(”则匹配“(”。即相当于多种编程语⾔中都有的“转义字符”的概念。

^

匹配输⼊字⾏⾸。如果设置了RegExp对象的Multiline属性,^也匹配“n”或“r”之后的位置。

$

匹配输⼊⾏尾。如果设置了RegExp对象的Multiline属性,$也匹配“n”或“r”之前的位置。

*

匹配前⾯的⼦表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。

+

匹配前⾯的⼦表达式⼀次或多次(⼤于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。

匹配前⾯的⼦表达式零次或⼀次。例如,“do(es)?”可以匹配“do”或“does”。?等价于{0,1}。

{n}

n是⼀个⾮负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

{n,}

n是⼀个⾮负整数。⾄少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价

于“o+”。“o{0,}”则等价于“o*”。

{n,m}

m和n均为⾮负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o为⼀组,后三个o为

⼀组。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

当该字符紧跟在任何⼀个其他限制符(*,+,?,{n},{n,},{n,m})后⾯时,匹配模式是⾮贪婪的。⾮贪婪模式尽可能少地匹配所搜索的字符

串,⽽默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串“oooo”,“o+”将尽可能多地匹配“o”,得到结果

[“oooo”],⽽“o+?”将尽可能少地匹配“o”,得到结果['o','o','o','o']

.点

匹配除“n”和"r"之外的任何单个字符。要匹配包括“n”和"r"在内的任何字符,请使⽤像“[sS]”的模式。

(pattern)

匹配pattern并获取这⼀匹配。所获取的匹配可以从产⽣的Matches集合得到,在VBScript中使⽤SubMatches集合,在JScript中则使⽤

$0…$9属性。要匹配圆括号字符,请使⽤“”或“”或“”。

(?:pattern)

⾮获取匹配,匹配pattern但不获取匹配结果,不进⾏存储供以后使⽤。这在使⽤或字符“(|)”来组合⼀个模式的各个部分时很有⽤。例

如“industr(?:y|ies)”就是⼀个⽐“industry|industries”更简略的表达式。

(?=pattern)

⾮获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使⽤。例如,“Windows(?

=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字

符,也就是说,在⼀个匹配发⽣后,在最后⼀次匹配之后⽴即开始下⼀次匹配的搜索,⽽不是从包含预查的字符之后开始。

(?!pattern)

⾮获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使⽤。例

如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。

(?<=pattern)

⾮获取匹配,反向肯定预查,与正向肯定预查类似,只是⽅向相反。例如,“(?<=95|98|NT|2000)Windows”能匹

配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。

*python的正则表达式没有完全按照正则表达式规范实现,所以⼀些⾼级特性建议使⽤其他语⾔如java、scala等

(?

⾮获取匹配,反向否定预查,与正向否定预查类似,只是⽅向相反。例如“(?

*python的正则表达式没有完全按照正则表达式规范实现,所以⼀些⾼级特性建议使⽤其他语⾔如java、scala等

x|y

匹配x或y。例如,“z|food”能匹配“z”或“food”(此处请谨慎)。“[z|f]ood”则匹配“zood”或“food”。

[xyz]

字符集合。匹配所包含的任意⼀个字符。例如,“[abc]”可以匹配“plain”中的“a”。

[^xyz]

负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”任⼀字符。

[a-z]

字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意⼩写字母字符。

注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表⽰字符的范围;如果出字符组的开头,则只能表⽰连字符本⾝.

[^a-z]

负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

b

匹配⼀个单词的边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,⼀种是匹配字符,⼀种是匹配位置,这⾥的b

就是匹配位置的)。例如,“erb”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“b1_”可以匹配“1_23”中

的“1_”,但不能匹配“21_3”中的“1_”。

B

匹配⾮单词边界。“erB”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。

cx

匹配由x指明的控制字符。例如,cM匹配⼀个Control-M或回车符。x的值必须为A-Z或a-z之⼀。否则,将c视为⼀个原义的“c”字符。

d

匹配⼀个数字字符。等价于[0-9]。grep要加上-P,perl正则⽀持

D

匹配⼀个⾮数字字符。等价于[^0-9]。grep要加上-P,perl正则⽀持

f

匹配⼀个换页符。等价于x0c和cL。

n

匹配⼀个换⾏符。等价于x0a和cJ。

r

匹配⼀个回车符。等价于x0d和cM。

s

匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[fnrtv]。

S

匹配任何可见字符。等价于[^fnrtv]。

t

匹配⼀个制表符。等价于x09和cI。

v

匹配⼀个垂直制表符。等价于x0b和cK。

w

匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这⾥的"单词"字符使⽤Unicode字符集。

W

匹配任何⾮单词字符。等价于“[^A-Za-z0-9_]”。

xn

匹配n,其中n为⼗六进制转义值。⼗六进制转义值必须为确定的两个数字长。例如,“x41”匹配“A”。“x041”则等价

于“x04&1”。正则表达式中可以使⽤ASCII编码。

num

匹配num,其中num是⼀个正整数。对所获取的匹配的引⽤。例如,“(.)1”匹配两个连续的相同字符。

n

标识⼀个⼋进制转义值或⼀个向后引⽤。如果n之前⾄少n个获取的⼦表达式,则n为向后引⽤。否则,如果n为⼋进制数字(0-7),则n

为⼀个⼋进制转义值。

nm

标识⼀个⼋进制转义值或⼀个向后引⽤。如果nm之前⾄少有nm个获得⼦表达式,则nm为向后引⽤。如果nm之前⾄少有n个获取,则n

为⼀个后跟⽂字m的向后引⽤。如果前⾯的条件都不满⾜,若n和m均为⼋进制数字(0-7),则nm将匹配⼋进制转义值nm。

nml

如果n为⼋进制数字(0-7),且m和l均为⼋进制数字(0-7),则匹配⼋进制转义值nml。

un

匹配n,其中n是⼀个⽤四个⼗六进制数字表⽰的Unicode字符。例如,u00A9匹配版权符号(©)。

p{P}

⼩写p是property的意思,表⽰Unicode属性,⽤于Unicode正表达式的前缀。中括号内的“P”表⽰Unicode字符集七个字符属性

之⼀:标点字符。

其他六个属性:

L:字母;

M:标记符号(⼀般不会单独出现);

Z:分隔符(⽐如空格、换⾏等);

S:符号(⽐如数学符号、货币符号等);

N:数字(⽐如阿拉伯数字、罗马数字等);

C:其他字符。

*注:此语法部分语⾔不⽀持,例:javascript。

<

>

匹配词(word)的开始(<)和结束(>)。例如正则表达式能够匹配字符串"forthewise"中的"the",但是不能匹配字符

串"otherwise"中的"the"。注意:这个元字符不是所有的软件都⽀持的。

()将(和)之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到⼀个临时区域(⼀个正则表达式中最多可以保存

9个),它们可以⽤1到9的符号来引⽤。

|将两个匹配条件进⾏逻辑“或”(or)运算。例如正则表达式(him|her)匹配"itbelongstohim"和"itbelongstoher",但是不能匹

配"itbelongstothem."。注意:这个元字符不是所有的软件都⽀持的。

更多推荐

正则表达式任意字符