巧用正则零宽断言实现靓号检索逻辑

摘要:
最近,在微信Woka项目中,联通有一个号码匹配规则,例如AAA、AA、ABAB、AABB和其他类似的号码匹配规则。乍一看,这似乎有点复杂,但事实上,使用正则=Forward pre-check,no˂=可以很容易地进行匹配,这两者都是非捕获的。让我们看看示例AAA中正则/(?=4)d)/的含义。第一个位置是数字。前两个数字有点尴尬。结合反向引用和零宽度断言,我们可以做出许多类似于这种漂亮逻辑的判断,因此我们不必努力编写解析器来判断格式

最近做微信沃卡项目,有个联通靓号匹配规则,诸如AAA,AA,ABAB,AABB等等类似的号码匹配规则,乍一看,貌似还有小复杂,其实使用正则可以实现轻松匹配。

image

这里需要用到正则的两个基本知识点

1. 反向引用,1,2分表表示第一个第二个正则子表达式捕获分组

2. 零宽断言,度娘传送门http://baike.baidu.com/view/5201192.htm

注意,js语言的正则中只有?!负向预查和?=正向预查,没有?<= 而这两个都是非捕获

再来看我们的例子

AAA的正则/(d)(?=1)(d)(?=1)d/的意思,第一个位置是一个数字(后面跟着和第一个匹配分组一样的)一个数字(后面跟着和第一个匹配分组一样的)一个数字

AABB的正则/((d)(?=2)d)(?!1)((d)(?=4)d)/的意思,第一个位置是一个数字(后面跟着和第二个匹配分组一样的)一个数字,前面两个数字(后面跟着和第一个匹配分组就是前面两个数组不等)两个数字(一个数字后面跟着和他一样的一个数字)

说的有点拗口,结合反向引用和零宽断言,我们可以实现很多类似这种靓号逻辑的判断,就不用在辛苦自己写解析器去判断格式了

免责声明:文章转载自《巧用正则零宽断言实现靓号检索逻辑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇c++学习之:根据GetLastError()返回值获取错误信息【Oracle学习笔记】索引下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx location详解

Nginx的Location匹配   Location根据类型分为两种:普通配置和正则匹配   一、 普通配置   普通location根据使用方法又分为两种,格式如下: 1.  location  / { 命令序列 }         解释:括号中定义的表示对当前路径及子路径下的所有对象有效。“优先级最低” 用户所有的请求都能被它匹配到。        ...

正则校验:微信号,qq号,邮箱

java判断微信号、手机、名字的正则表达 - willgos - 博客园https://www.cnblogs.com/solossl/p/5813106.html 微信号正则校验,qq正则,邮箱正则 - qq_29091239的博客 - CSDN博客https://blog.csdn.net/qq_29091239/article/details/800...

[Go] 在golang中使用正则表达式捕获子表达式

正则匹配并且可以捕获到()这个里面的子表达式的值,linux的grep命令没办法捕获子表达式的值,只能获取到整条正则匹配的内容 package main import "regexp" import "fmt" func main() { str := `(.*?)(d+)(.*?)d(.*)d` r := regex...

精准准确的统一社会信用代码正则(js)

参照标准: 《GB_32100-2015_法人和其他组织统一社会信用代码编码规则.》按照编码规则:统一代码为18位,统一代码由十八位的数字或大写英文字母(不适用I、O、Z、S、V)组成,由五个部分组成:第一部分(第1位)为登记管理部门代码,9表示工商部门;(数字或大写英文字母)第二部分(第2位)为机构类别代码;(数字或大写英文字母)第三部分(第3-8位)为...

AOP+自定义注解实现全局参数校验

AOP+自定义注解实现全局参数校验 在开发过程中,用户传递的数据不一定合法,虽然可以通过前端进行一些校验,但是为了确保程序的安全性,保证数据的合法,在后台进行数据校验也是十分必要的。 后台的参数校验 在controller方法中校验: 后台的参数是通过controller方法获取的,所以最简单的参数校验的方法,就是在controller方法中进行参数校验。...

java用正则方法验证文件名是否合法

Java中用到文件操作时,经常要验证文件名是否合法. 用File类的createNewFile()方法的确很管用.但当要批量验证时,效率上就会有问题.正则匹配的开销比创建文件少了很多. 那么一个合法的文件(Win下)应该符合如下规则:  1.文件名不能为空,空在这里有两个意思:  文件名(包括扩展名)长度为0或仅由空字符组成(包括 等不可见的转义字符)...