快速掌握正则表达式基本用法

正则表达式

测试工具

限定符

问号

问号表示,前面的字符可以出现0次或者1次,即可有可无

例如

used? 既可以匹配use,也可以匹配used

星号

星号表示,前面的字符可以出现0次或多次,即可以有多个也可以没有

例如

ab*c 可以匹配ac,abc,abbbc,abbbbbbc,…

加号

加号表示,前面的字符可以出现1次或多次,即至少有一个

例如

ab+c 可以匹配abc,abbc,abbbccc,…而刚才的ac就无法匹配了

花括号

花括号可以用于指定出现的次数

例如

ab{6}c 只能匹配abbbbbbc,即b出现6次

ab{2,6}匹配b出现2~6次,即b的个数>=2或<=6

ab{2,}c表示b出现次数大于等于2

多字符限定

用小括号括起来然后再加限定符,就可以匹配多字符

例如

(ab)+就可以匹配ab,abab,ababab,…

"或"运算符

|用于表示"或"运算符,类似于枚举

例如要匹配a cata dog,则是

a (cat)|(dog)

注意小括号不能省略,否则会匹配成 a catdog

字符类

[]用于表示字符类

如果想要匹配只由abc这三个字母组成的字符,可以写成
[abc]+, 可以匹配a,b,c,abc,abbc,bc,acccb,aaaabbc,…

可以在方括号中指定字符的范围,如

[a-z]代表所有的小写英文字符

[A-Z]代表所有大写英文字符

[a-zA-Z]代表所有英文字符

[0-9]代表所有数字

[a-zA-Z0-9]代表所有数字和英文字符

如果在方括号里前面加一个 ^,则表明匹配除了方括号里的字符

例如

[^a-z]则匹配不包含小写字符,注意也会包括换行符等字符

元字符

元字符是正则表达式中预置好的匹配,大都以反斜杠开头,如:

元字符含义
\d数字字符
\w单词字符、数字及下划线
\s空白符(包含Tab和换行符)
\b单词边界
\D非数字字符
\w非单词字符
\S非空白字符
\B非单词边界
.代表任意字符,但不包含换行符
^代表匹配行首
$代表匹配行尾巴

例如

^a只会匹配行首的a

a$只会匹配行尾的a

abbc\b会判断abbc后面是否有空格换行等,来判断边界

贪婪与惰性依赖

之前的限定符+,*,{}默认回去匹配尽可能多的字符,

例如想要匹配下面这段html标签中的span和b,

<span><b>This is a sample text</b></span>

自然会想到用

<.+>

但是这个正则表达式会匹配整段html,即把上面这一段html全都匹配了,原因是.+会尽可能多的匹配字符

.会匹配右尖括号,导致原来的那个>也被匹配,解决办法是改为<.+?>,这样就只会匹配相应的html标签

加一个?会将默认的贪婪匹配改为懒惰匹配

实例

匹配十六进制RGB值

如需要匹配

#000000

#00ff00

#ffaa00

#[a-fA-F0-9]{6}\b

首先用#匹配开头,然后可能出现的字符,总共是6次,最后确定边界

IPv4地址匹配

0.0.0.0

192.168.1.0

255.255.255.0

256.256.256.256

首先可以想到
\d+\.\d+\.\d+\.\d+

\d+会匹配任意长度大于1的数字

.会匹配任意字符,所以需要用到转义符写成\.

问题是数字是0-255之前的取值范围,明显256超过了这个范围,改进就是下面的思路

首先看每一段数字

如果数字的前两位是25,则第三个数字只能去0-5,即25[0-5]

如果数字第一位是2,第二位是0-4之间的数,则第三位是0-9之间的数字,即2[0-4]\d

如果第一位是0或1,后面两位可以取任意数字,即[01]\d\d

而IP地址也是可以用一位或者两位表示,所以在后面两位后面加一个?,即[01]\d?\d?

之后再匹配后面的句点\.

使用“或”组合起来就是

25[0-5]|2[0-4]\d|[01]\d?\d?\.

再用小括号括起来,出现三次,即:

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

再把最后一位补上,去掉句点,同时用\b设定边界

\b(25[0-5]|2[0-4]\d|[01]\d?\d?\.){3}(25[0-5]|2[0-4]\d|[01]\d?\d?)\b

参考教程

正则表达式30分钟入门教程 作者: deerchao

Regex tutorial — A quick cheatsheet by examples (英文) 作者: Jonny Fox

Regular Expressions Tutorial (英文)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值