0

我,我正在做一个模式正则表达式来检查一个字符串是否是:

像这样的数字.数字.数字:

1.1.1
0.20.2
58.55541.5221

在java中我使用这个:

private static Pattern pattern = Pattern.compile("\\d*.\\d*.\\d*", Pattern.CASE_INSENSITIVE);

但如果我通过 20.20。在比赛中让我回归真实。

什么是地?

4

5 回答 5

7

您应该使用+而不是*. *是 0 次或多次重复,而+是 1 次或多次重复。

此外,不要忘记转义.字符:

"\\d+\\.\\d+\\.\\d+"
于 2012-11-13T16:41:25.673 回答
6

您使用了*量词。匹配0 or more repetition

使用+量词,它匹配1 or more repetition: -

Pattern.compile("\\d+\\.\\d+\\.\\d+");

此外,您需要转义您的dot(.),因为它在 中具有特殊含义Regex,它匹配任何字符。所以,.在你的正则表达式中,不仅是匹配.,它实际上会匹配任何字符。

于 2012-11-13T16:41:52.507 回答
2

你必须逃离这个点!它匹配任何字符,请参阅文档

所以你需要

Pattern.compile("\\d+\\.\\d+\\.\\d+");

我也替换*+,*因为也会计算 0 位数字。

于 2012-11-13T16:42:10.937 回答
2

zzzzBov 的建议是正确的,你还需要转义.,所以正确的正则表达式是

\\d+\\.\\d+\\.\\d+
于 2012-11-13T16:43:14.910 回答
0

这是您需要的基本正则表达式

\d+\.\d+(\.\d+)?

这将匹配以下内容

20.20.20
1.1.1
1.1.1
0.20.2
58.55541.5221
20.20
于 2012-11-13T16:53:43.210 回答