一文教你学会正则表达式的基本使用

正则表达式的基本使用

♡ \color{red}{\heartsuit}

1.什么是正则表达式

正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。

2.正则表达式目的

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

3.正则表达式符号

正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。

常用元字符

符号含义
^表示匹配字符串的开始位置,多行模式下匹配每一行的行首 。(注意:用在中括号中[ ]时,可以理解为取反,表示不匹配括号中的字符串)
$表示匹配字符串的结束位置,多行模式下匹配每一行的行尾
*表示匹配零次到多次。 例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。\*等价于o{0,}
+表示匹配一次到多次(至少有一次)。例如“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
?表示匹配零次或一次。例如“do(es)?”可以匹配“do”或“does”。?等价于{0,1}。
.表示匹配单个字符(除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式)
|表示为或者,两项中取一项
( )小括号表示匹配括号中全部字符
[ ]中括号表示匹配括号中一个字符范围描述。如[0-9 a-z A-Z]
{ }大括号用于限定匹配次数。如{n}表示匹配n个字符; {n,}表示至少匹配n个字符;{n,m}表示至少n,最多m。
\转义字符 如上基本符号匹配都需要转义字符。如*表示匹配*号
\w表示英文字母和数字
\W非字母和数字
\d表示数字
\D非数字
\n匹配一个换行符

等价字符

等价是等同于的意思,表示同样的功能,用不同符号来书写。
?,*,+,\d,\w 都是等价字符

  • ?等价于匹配长度{0,1}
  • *等价于匹配长度{0,}
  • +等价于匹配长度{1,}
  • \d等价于[0-9]
  • \D等价于[^0-9]
  • \w等价于[A-Za-z_0-9]
  • \W等价于[^A-Za-z_0-9]

懒惰限定符

贪婪(贪心) 如"*"字符 贪婪量词会首先匹配整个字符串,尝试匹配时,它会选定尽可能多的内容,如果失败则回退一个字符,然后再次尝试回退的过程就叫做回溯,它会每次回退一个字符,直到找到匹配的内容或者没有字符可以回退。相比下面两种贪婪量词对资源的消耗是最大的。
懒惰(勉强) 如 “?” 懒惰量词使用另一种方式匹配,它从目标的起始位置开始尝试匹配,每次检查一个字符,并寻找它要匹配的内容,如此循环直到字符结尾处。

“*?” 重复任意次,但尽可能少重复
   如 “acbacb” 正则 “a.*?b” 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb"
“+?” 重复1次或更多次,但尽可能少重复
   与上面一样,只是至少要重复1次
“{n,m}?” 重复n到m次,但尽可能少重复
如 “aaaaaaaa” 正则 “a{0,m}” 因为最少是0次所以取到结果为空
“{n,}?” 重复n次以上,但尽可能少重复
如 “aaaaaaa” 正则 “a{1,}” 最少是1次所以取到结果为 “a”

组合

.*具有贪婪的性质,匹配到不能匹配为止,最大匹配原则。
+或后跟?表示非贪婪匹配,即尽可能少的匹配,最小匹配原则。
.
? 表示在能匹配成功的前提下尽可能少的匹配,最小匹配原则。

♠ \color{red}{\spadesuit}

4.正则表达式的应用实例

1.校验是否全由数字组成
/^[0-9]{1,20}$/
^ 表示打头的字符要匹配紧跟^后面的规则
$ 表示打头的字符要匹配紧靠$前面的规则
[ ] 中的内容是可选字符集
[0-9] 表示要求字符范围在0-9之间
{1,20}表示数字字符串长度合法为1到20,即为[0-9]中的字符出现次数的范围是1到20次。
/^ 和 $/成对使用应该是表示要求整个字符串完全匹配定义的规则,而不是只匹配字符串中的一个子串。

2.校验登录名:只能输入5-20个以字母开头、可带数字、“”、“.”的字串
/^[a-zA-Z]{1} ([a-zA-Z0-9]|[._]){4,19}$/
^[a-zA-Z]{1} 表示第一个字符要求是字母
([a-zA-Z0-9] | [._]){4,19} 表示从第二位开始(因为它紧跟在上个表达式后面)的一个长度为4到9位的字符串,它要求是由大小写字母、数字或者特殊字符集[.]组成。

3.校验用户姓名:只能输入1-30个以字母开头的字串
/^[a-zA-Z]{1,30}$/

4.校验密码:只能输入6-20个字母、数字、下划线
/^(\w){6,20}$/
\w:用于匹配字母,数字或下划线字符

5.校验普通电话、传真号码:可以“+”或数字开头,可含有“-” 和 “ ”
/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/
\d:用于匹配从0到9的数字;
“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次
可以匹配的字符串如:+123 -999 999 ; +123-999 999 ;123 999 999 ;+123 999999等

6.校验URL
/^http[s]{0,1}:\/\/.+$/ 或 /^http[s]{0,1}:\/\/.{1,n}$/ (表示url串的长度为length(“https://”) + n )
\ / :表示字符“/”。
. 表示所有字符的集
+ 等同于{1,},就是1到正无穷

正则表达式的练习

符号含义
“^\d+$”非负整数(正整数+0)
“^[0-9]*[1-9][0-9]*$”正整数
“^((-\d+)|(0+))$”非正整数(负整数+0)
“^-[0-9]*[1-9][0-9]*$”负整数
“^-?\d+$”整数
“^\d+(\.\d+)?$”非负浮点数(正浮点数+0)
“^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$”正浮点数
“^((-\d+(\.\d+)?)|(0+(\.0+)?))$”非正浮点数(负浮点数+0)
“^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$”负浮点数
“^(-?\d+)(\.\d+)?$”浮点数
“^[A-Za-z]+$”由26个英文字母组成的字符串
“^[A-Z]+$”由26个英文字母的大写组成的字符串
“^[a-z]+$”由26个英文字母的小写组成的字符串
“^[A-Za-z0-9]+$”由数字和26个英文字母组成的字符串
“^\w+$”由数字、26个英文字母或者下划线组成的字符串
“^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$”email地址
“^[a-zA-z]+://(\w+(-\w+)*)(.(\w+(-\w+)*))*(\?\S*)?$”url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/月/日/年
“^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$”Email
“(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?”电话号码
“^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$”IP地址
^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$YYYY-MM-DD基本上把闰年和2月等的情况都考虑进去了

5.常用的正则匹配工具

在线匹配工具:

1、 http://www.regexpal.com/
2、https://rubular.com/

6.正则表达式在jmeter中的应用

假设有这样一个响应报文,要提取token,正则表达式如何写?

{
    "msg": "成功调用",
    "code": 0,
    "data": {
        "pmoney": 100.0,
        "createtime": 1651931348194,
        "sex": 1,
        "mobile": "15889209503",
        "token": "bLaAwfXSZwARL+9CLbU7NiG6TeoVo+CaEyS92RRnyeUowDqmFmux0qaXE0ugHCYVxRU\/jxaEwo\/fQbjJJq9BrA==",
        "lasttime": 1651931348194,
        "money": 0.0,
        "gqid": "4000045",
        "identity": "cc53eea227dd92a7",
        "id": 160116,
        "age": 20,
        "email": "15889200001@qq.com",
        "username": "test11"
    }
}

如下:我们这里的需求是提取一个值,那如果一个正则表达式提取器要提取多个值呢?
在这里插入图片描述
假设我们要提取code和token,这两个值之间还有其他值,要如何写正则提取式呢?
一个正则提取器,写多个正则提取式:分隔符用 (.*?)

在这里插入图片描述

"code":"(.*?)",(.*?),"token":"(.*?)"

在这里插入图片描述
那么要如何引用提取的变量呢?

通过察看结果树可以看到要提取的值在regtk_1_g1和regtk_1_g3,那么如果要引用该变量直接${regtk_1_g1}即可

在这里插入图片描述
JMeter中还有JSON提取器、XPath提取器可以提取。

参考文章:
关于正则表达式基本语法的应用详解(必看篇)
正则表达式-百度百科
正则表达式基本语法详解
添加链接描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值