我想匹配表单的字符串:
123
.123
1.123
我正在使用以下字符串作为我的正则表达式
@"^\\d*(?:\\.\\d+)?$"
但是,它也匹配以下形式的字符串
1.2.3
1..2..3
123...
我的正则表达式出了什么问题?我使用了^
和$
因为我不希望字符串包含除了提到的数字形式以外的任何内容。
编辑:
我记录了像78..7
这样的字符串中匹配的内容,发现匹配位置为0,长度为0,结果为“”匹配。有任何想法吗?如果长度为0,那么范围位置不应该是NSNotFound吗?我想正则表达式很好然后我可以检查!长度,但这似乎是一个不必要的工作。
答案 0 :(得分:1)
试试这个正则表达式:
^(?<!\.)\d*(\.\d+)?$
我添加了一个负面的后视断言,这意味着在这些数字之前不允许任何点。这应该可以解决你的问题。
答案 1 :(得分:1)
此正则表达式将找到有或没有小数点的有效正实数。例如123
,.123
,1.123
。表达式可以应用于一个字符串,其中每个测试值都在它自己的行上,或者在一个文本块的中间找到数字。它还会在数字后直接使用句点和逗号等标点符号,但不会捕获它们。
(?<=^|\s)\d*\.?\d+(?=[,.;]?(?:\s|$))
给定输入字符串:
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]+