点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~
这篇文章通过解决实际项目开发中遇到的如何自动获取短信验证码的问题,进一步讲述在Java中如何使用正则。
Java中如何使用正则
Java中正则相关类位于java.util.regex包下,主要使用2个类,如下:
Pattern类:
Pattern是正则表达式regex的编译表示形式
Matcher类:
通过解释Pattern对输入的字符串input执行匹配操作的引擎
注意:在Java代码中转义字符“\”要写成“\\”才表示一个“\”。
比如regex=\d,在Java代码中应该写成“\\d”。
实际问题:如何自动获取短信验证码?
短信验证码在目前的互联网应用的非常广泛,在一些重要操作中都需要输入短信验证码来验证身份信息。
列举3条不同的验证码短信内容如下:
1、【膜拜单车】您的验证码是5072.请在页面中提交验证码完成验证。
2、【大众点评】876529(大众点评网手机验证码,请完成验证),如非本人操作,请忽略本短信。
3、【百度】349865(动态验证码),请在30分钟内填写。
那么如何通过一个正则表达式来获取到3个不同类型的短信内容里的数字验证码呢?
首先分析以上3条短信内容,找出共同点:
1、验证码都是数字,可以是4位数字,也可以是6位数字
2、每条短信都包含“验证码”3个汉字
3、“验证码”3个字与数字的顺序关系,“验证码”3个字可以在数字前,也可以在数字后
有了上面的3个点,我们就可以写在正则工具里写正则表达式进行验证了。
1、4位数字或者6位数字,可以用“\d{4}|\d{6}”来匹配,我们使用捕获组( )来获取数字部分,即regex=(\d{4}|\d{6})
2、验证码3个字就用“验证码”来匹配,regex=验证码
3、“验证码”3个字在数字前,可以regex=验证码\D*(\d{4}|\d{6}),“验证码”3个字在数字后,可以regex=(\d{4}|\d{6})\D*验证码,这2个表达式是或的关系,需要用到括号来组织这2个表达式,然后再用或“|”来进行选择,即regex=(验证码\D*(\d{4}|\d{6}))|((\d{4}|\d{6})\D*验证码)
4、由于要通过捕获组( )来获取数字内容,又要用括号来组织关系,因此需要把或“|”两边的表达式部分用非捕获组(?:)来标记,因为我们只需要获取数字部分的括号( )匹配到的数字。即regex=(?:验证码\D*(\d{4}|\d{6}))|(?:(\d{4}|\d{6})\D*验证码)
如果这里看不懂的话,请看《一篇文章学会正则表达式的语法》的相关内容。
最后我们把分析到的表达式代入到Java代码完成功能。注意在Java中,反斜杠需要转义,即一杠变二杠。
运行结果如下:
如果想获取以上的源代码,请在后台回复关键词“正则源码”获取。
推荐一个正则工具“RegexBuddy”,在后台回复关键词“正则表达式”获取。