2017-10-17 66 views
0

我试图来计算这种情况下正则表达式:正则表达式用或情况

的ID必须以字母“M”,并与3位结束,但三联零是不允许的。

我已经试过

M(00[1-9]) 

但在阻止三联零,我怎么能应付其他数字,这只是工程?

+0

像这样M([0-9] {2} [1-9]) – Gunner

+1

@Gunner但是,如果前两位数字不是0,最后一个可能是0,所以该模式不会工作。 –

+0

三重零负的前瞻性。 –

回答

3

最简单的方法可能是与负前瞻:

M(?!0{3})\d{3} 

[Regex101]

这符合字面M,将检查接下来的事情是不是三个零,然后匹配三位数。

如果你想阻止一组特定的数字,您可以修改前瞻到(这里0,2 5,6)检查特定重复数字:

M(?!([0256])\1{2})\d{3} 

[Regex101]

要检查所有三位数字,请将[0256]替换为\d。这个正则表达式对一个数字进行前瞻检查,然后使用反向引用测试它是否重复两次。

一个不太冗余的方法可能是把捕获组先行外:

M(\d)(?!\1{2})\d{2} 

[Regex101]

这个版本说来捕捉一个数字,确保它不重复两次以上,然后再捕获两个数字。

+0

感谢发布,将删除我的。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ对不起,我在手机上,但没有与应用程序。甚至没有意识到还有其他答案。 –

+0

非常感谢!不知道那会很复杂。新的正则表达式在这里。 – NewbieCoder