iOS正则表达式模式无法匹配数字

时间:2013-06-12 19:42:21

标签: ios regex numbers

我想匹配表单的字符串:

123
.123
1.123

我正在使用以下字符串作为我的正则表达式

@"^\\d*(?:\\.\\d+)?$"

但是,它也匹配以下形式的字符串

1.2.3
1..2..3
123...

我的正则表达式出了什么问题?我使用了^$因为我不希望字符串包含除了提到的数字形式以外的任何内容。

编辑:

我记录了像78..7这样的字符串中匹配的内容,发现匹配位置为0,长度为0,结果为“”匹配。有任何想法吗?如果长度为0,那么范围位置不应该是NSNotFound吗?我想正则表达式很好然后我可以检查!长度,但这似乎是一个不必要的工作。

5 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

^(?<!\.)\d*(\.\d+)?$

我添加了一个负面的后视断言,这意味着在这些数字之前不允许任何点。这应该可以解决你的问题。

答案 1 :(得分:1)

描述

此正则表达式将找到有或没有小数点的有效正实数。例如123.1231.123。表达式可以应用于一个字符串,其中每个测试值都在它自己的行上,或者在一个文本块的中间找到数字。它还会在数字后直接使用句点和逗号等标点符号,但不会捕获它们。

(?<=^|\s)\d*\.?\d+(?=[,.;]?(?:\s|$))

enter image description here

给定输入字符串:

1.2.3
1..2..3
128...
1234
.123
1.123
1...23
1.2.3
123...
I like kittens 345.23, and version 2.3.4 dogs

匹配是:

1234
.123
1.123
345.23

答案 2 :(得分:0)

这对你有用吗?

@"^\\d*\\.?\\d+$"

这里没有转义反斜杠:

^\d*\.?\d+$

答案 3 :(得分:0)

我最好的猜测是,$符号不起作用,rekire是正确的。如果是这种情况,那么正则表达式确实匹配字符串开头的空子字符串,这解释了为什么它说它在位置0找到了长度为0的匹配,而不是NSNotFound。

答案 4 :(得分:0)

这是REGEX与您的字符串匹配:

[0-9]*(.){0,1}[0-9]+