2

我是 Java 新手。我需要一个正则表达式来匹配具有这种模式的字符串:

[0-9].[0-9].[0-9]

例如,正则表达式应该严格匹配5.5.0or4.6.55.2.2

上面的模式匹配字符串135.9.0,输出为5.9.0

但我不想匹配这种模式。

我应该能够准确匹配由句点(。)符号分隔的三个数字。

4

5 回答 5

3

作为.正则表达式中的元字符,将其转义为\.. 因此表达,

[0-9]\.[0-9]\.[0-9]

这可以简化为

\d\.\d\.\d

甚至到

(\d\.){2}\d

这将匹配以 . 分隔的任何 3 位数字.

另请注意,如果您想从中提取5.9.0,请"string 5.9.0"使用上面的正则表达式。但是如果你想5.9.0完全匹配"5.9.0"(整个字符串,用于某种验证),你应该^在开始和$结束时使用它们。所以它会像

^(\d\.){2}\d$

最后(因为您的问题很不清楚您是要匹配单个数字还是数字序列),匹配数字序列使用[0-9]+而不是[0-9]\d+代替\d.

于 2012-10-11T07:33:46.713 回答
1

下面的正则表达式会做你想做的事: -

\b\d+\.\d+\.\d+\b
  • \d匹配任何数字。

如果您只想匹配single由您分隔的数字.,您可以使用:-

\b\d\.\d\.\d\b
  • \b用于边界检查..

试试这个代码: -

String str = "5.0.0 abc 5.6.7 abc 12.45.65 From: 133.5.0<pos1.002otak.com>";

Pattern pattern = Pattern.compile("\\b\\d\\.\\d\\.\\d\\b"); 
Matcher match = pattern.matcher(str);

while (match.find()) {
    System.out.println(match.group(0));
}

输出

5.0.0
5.6.7
// 12.45.65 is not printed

更新: -

要匹配1.4.5内部abc1.4.5def而不是121.4.546使用以下模式: -

[^\\d](\\d\\.\\d\\.\\d)[^\\d]
于 2012-10-11T07:37:11.743 回答
1

您可以使用:

^\d\.\d.\d$

或者

\b\d\.\d.\d\b
于 2012-10-11T07:37:42.523 回答
1

你应该用反斜杠转义你的点,因为点匹配正则表达式中的每个字符。
您应该在正则表达式的开头添加一个插入符号 (^) 并在末尾添加一个美元符号,以将匹配限制为整个字符串而不是它的一部分(如果字符串包含您不想要的内容,则可能匹配)。

^[0-9]\.[0-9]\.[0-9]$

或者通过使用匹配一个预定义的前缀/后缀,或者一个非数字的开头(这只有当你的字符串可能在开头有数字以外的东西,否则使用上面的):

[^0-9]
于 2012-10-11T07:34:08.867 回答
1

这个正则表达式会做

\b\d\.\d\.\d\b

\d匹配一个数字,即0-9

.需要转义,\否则它将匹配任何字符

于 2012-10-11T07:36:24.127 回答