Regex 2或5位的正则表达式

Regex 2或5位的正则表达式,regex,Regex,如何编写只能匹配2或5位数字的正则表达式 到目前为止,我有这个,但它匹配任何2到5位数的数字 ^\d{2,5}$ 使用3个可选数字: ^\d{2}\d{3}?$ 请注意,某些正则表达式引擎会将任何重复修饰符(即使是固定修饰符)之后的?解释为非冻结修饰符,这似乎会导致两位数的情况出现问题。如果您遇到这种情况,请使用: ^\d{2}(?:\d{3})?$ 您可以在中阅读一些正则表达式的基础知识 顺便说一句,上述方法实际上等同于(但效率略高)使用交替的方法: ^(?:\d{

如何编写只能匹配2或5位数字的正则表达式

到目前为止,我有这个,但它匹配任何2到5位数的数字

           ^\d{2,5}$
使用3个可选数字:

^\d{2}\d{3}?$
请注意,某些正则表达式引擎会将任何重复修饰符(即使是固定修饰符)之后的
解释为非冻结修饰符,这似乎会导致两位数的情况出现问题。如果您遇到这种情况,请使用:

^\d{2}(?:\d{3})?$
您可以在中阅读一些正则表达式的基础知识

顺便说一句,上述方法实际上等同于(但效率略高)使用交替的方法:

^(?:\d{2}|\d{5})$
(只是为了向您展示另一个正则表达式概念。)

A
表示输入的开始,
z
表示输入的结束


这适用于PHP和JAVA;不确定js或perl。

-1。第一个在Java中是错误的。
将表示惰性匹配。@nhahtdh,只有当
{..}
是一个范围,或者不是范围时,@m.buettner:我认为重复次数固定时,与正常情况没有什么不同,但是
将被解释为惰性。@m.buettner:这种情况非常有趣,因为Java将
视为惰性,但是ruby认为它是贪婪的0或1。我认为您应该编辑您的答案,只使用第二种情况,因为它将最大限度地提高兼容性。@nhahdh,我为第一种变体添加了一个修复程序
/^\A\d{2}\z$|^\A\d{5}\z$/