我是 Java 新手。我需要一个正则表达式来匹配具有这种模式的字符串:
[0-9].[0-9].[0-9]
例如,正则表达式应该严格匹配5.5.0
or4.6.5
或5.2.2
。
上面的模式匹配字符串135.9.0
,输出为5.9.0
但我不想匹配这种模式。
我应该能够准确匹配由句点(。)符号分隔的三个数字。
作为.
正则表达式中的元字符,将其转义为\.
. 因此表达,
[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
.
下面的正则表达式会做你想做的事: -
\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]
您可以使用:
^\d\.\d.\d$
或者
\b\d\.\d.\d\b
你应该用反斜杠转义你的点,因为点匹配正则表达式中的每个字符。
您应该在正则表达式的开头添加一个插入符号 (^) 并在末尾添加一个美元符号,以将匹配限制为整个字符串而不是它的一部分(如果字符串包含您不想要的内容,则可能匹配)。
^[0-9]\.[0-9]\.[0-9]$
或者通过使用匹配一个预定义的前缀/后缀,或者一个非数字的开头(这只有当你的字符串可能在开头有数字以外的东西,否则使用上面的):
[^0-9]
这个正则表达式会做
\b\d\.\d\.\d\b
\d
匹配一个数字,即0-9
.
需要转义,\
否则它将匹配任何字符