军工

正则判断内容中,不得出现多个不同结果组

一世执手 提交于 2020-01-25 00:50:40
嗯。。。。看标题,有点迷糊,实在是文盲也形容不好这个说法 先看一个简单的例子,有任意长度的数字字符串,判断整个数字字符串有且仅有3个数字,即:1122331122为正确,1122为错误,1234也为错误 其实,这个正则还算比较简单,只需要有个思路一般都能写出来 各位先按照文盲的思路来实现以下 第一步:判断整个字符串是纯数字字符串 ^(?=[\d]+$) ,如果有长度要求,自行替换+符号 如果有格式要求,比如手机号,那么就这么写 ^(?=1\d{10}$) 好,然后问题来了,怎么判断是否已经有了三个不同的数字了呢?这就需要用到分组引用了 先来看看这个 ^(?=[\d]+$)(\d)\1\1 ,这个正则的意义很明显,即在数字字符串开始,前三个是相同的数字,类似 111234、333666999这样的,其中\1就是引用的第一个分子(\d) 那么,我们现在再次使用分组,找出第二个数字,正则大概如下 ^(?=[\d]+$) (\d) (?:\1*?) ( (?!\1) \d) ,这个也不算复杂,红色部分为第一个分组,也就是第一个数字,绿色部分表示,可以有与第一个数字相同的数字,也可以没有,但这个相同数字不参与分组,使用?:修饰符,然后就是蓝色部分,\d表示匹配一个数字,在\d前,紫色部分进行修饰,描述这个数字不能与第一个数字相同,这样就找到了第二个数字 那么