2015-01-20 308 views
0

我试图(^[0]?)\.*(?=.*[1-9])\d{1,3}?$表达式来匹配输入值应该只接受0。[001〜999],现在的问题是:正则表达式匹配准确0。[001至999]

它是匹配012或090等等。

我想要的表达精确匹配0。001 - 999]

任何帮助理解。

感谢, 斯里兰卡

+0

有没有错'^ 0 \。\ d \ d \ d $'? – 2015-01-20 23:15:22

+0

匹配0.000,但是,是的,这应该基本上工作 – cbreezier 2015-01-20 23:16:30

+1

是的,我最终意识到这一点。应该是'0 \。(?: 00 [1-9] | 0 [1-9] [0-9] | [1-9] [0-9] [0-9])$' - 唉! – 2015-01-20 23:22:42

回答

3

你有它匹配0个或更多\.*。它匹配0,所以你得到像012

^0\.[0-9]{2}[1-9]$ 

匹配的东西匹配一个0,然后.,然后[0-9]两次,然后[1-9]

编辑:乔纳森是对的,这不正确匹配像0.010

^0\.[0-9]{3}$ 

然后确保它不是0.000工作。

或者试试这个丑:^0\.(?:[0-9]{2}[1-9]|[0-9][1-9][0-9]|[1-9][0-9]{2})$

+1

这不会识别0.010,这可能是必需的。 0.001 .. 0.999是耐人寻味的。 – 2015-01-20 23:16:24

+1

嗯,是的,最简单的解决方案是通过另一个正则表达式/简单字符串比较来运行它,它明确禁止了'0.000'的情况,然后只是'\ d {3}'。 另一种在一个正则表达式中使用它的丑恶方式可能是3种情况:'[1-9] [0-9] {2} | [0-9] [1-9] [0-9] | [ 0-9] {2} [1-9]' – cbreezier 2015-01-20 23:21:06

0

我接受@Crazysheep答案。因为那引起了这个问题。

(^[0]?)\.(?=.*[1-9])\d{1,3}?$ seems to be working. 

测试在https://www.regex101.com/

谢谢大家快速反应。

+0

(a)这可能应该是评论,或者是接受的答案或者是你的问题,或者是编辑成问题。 (b)您是否检查过0.010,0.100等?它们应该匹配吗?他们匹配吗? – 2015-01-20 23:31:11

+0

0.010,0.100应匹配并匹配。我通过删除*字符获得了表达式,并且我没有尝试Crazysheep提供的解决方案,但我通过他的答案得到了答案。我会把它写成评论,谢谢你指点我。 – Sri 2015-01-20 23:47:25

+0

@Sri我只想指出你的正则表达式匹配诸如'0.1'和​​'0.01'的东西。这也有点复杂 - 在正则表达式引擎的内部工作方式和使用预览功能的工作方式之间存在一些奇怪的相互作用,但是我会小心谨慎。 – cbreezier 2015-01-20 23:51:57