我是Java新手。我需要一个正则表达式来匹配字符串与这样的模式:
[0-9].[0-9].[0-9]
例如,正则表达式应严格匹配5.5.0
或4.6.5
或5.2.2
。
上述模式匹配135.9.0
之类的字符串,这些字符串将输出为5.9.0
但我不想匹配这种模式。
我应该能够匹配正好用句号(。)符号分隔的三位数字。
答案 0 :(得分: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
{{1}}。
答案 1 :(得分:1)
你应该用反斜杠来逃避你的点,因为一个点匹配正则表达式中的每个字符 您应该在开头添加一个插入符号(^),在正则表达式的末尾添加一个美元符号以限制与整个字符串的匹配而不是它的一部分(如果字符串包含您不想要的内容,则可以匹配)。 / p>
^[0-9]\.[0-9]\.[0-9]$
或者通过使用匹配预定义的前缀/后缀或开头的非数字(仅当您的字符串在开头可能包含除数字之外的其他内容时,否则使用上述内容):
[^0-9]
答案 2 :(得分:1)
这个正则表达式将
\b\d\.\d\.\d\b
\d
匹配一个数字0-9
.
需要使用\
进行转义,否则它将匹配任何字符
答案 3 :(得分:1)
在Regex下面会做你想做的事: -
\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]
答案 4 :(得分:1)
您可以使用:
^\d\.\d.\d$
或者
\b\d\.\d.\d\b