正则表达式正确匹配字符串?

时间:2010-08-13 17:34:08

标签: java regex

我会提到这个问题,虽然我远离正规表达大师,但对我来说并不完全陌生。构建一个正则表达式来搜索特定字符串中的模式通常对我来说不是问题,但我有一个(可能是?)独特的情况。

我有一组价值观,比如说:

  

028938
  DEF567987
  390987.456
  GHI345928.039

我想匹配一组特定的字符串,例如:

  • 正好由6位数组成的字符串
  • 由正好6位数字组成的字符串,小数点后跟3位数

在上面的例子中,第一个和第三个值应该匹配。

我正在使用正则表达式:

[0-9]{6}
[0-9]{6}.[0-9]{3}

不幸的是,由于以上所有示例都包含指定的模式,因此所有值都匹配。这不是我的意图。

所以我的问题,简而言之,就是如何编写一个完全匹配字符串的正则表达式,匹配模式的右侧或左侧没有其他字符?这种匹配是否有术语? (谷歌没有帮助。)TIA

5 个答案:

答案 0 :(得分:42)

使用^$来匹配字符串的开头和结尾

^[0-9]{6}$
^[0-9]{6}\.[0-9]{3}$

参考:http://www.regular-expressions.info/anchors.html

另外,如Mikael Svenson所述,如果您在更大的文本块中搜索此模式,则可以使用边界\b一词。

参考:http://www.regular-expressions.info/wordboundaries.html

您也可以一次性写出这两个正则表达式

^\d{6}(\.\d{3})?$

答案 1 :(得分:4)

您可以使用^要求在行的开头匹配,$要求行的结尾

^[0-9]{6}\.[0-9]{3}$

[0-9]也可以写成\ d

^\d{6}\.\d{3}$

如果你想在一行中匹配你的模式,你也可以使用\b作为单词边界。其中的空格

\btest\b

将与此行中的test字匹配

this is a test for matching

答案 2 :(得分:2)

^\d{6}$
^\d{6}\.\d{3}$

是您可以测试它们的正确模式6 digits only6 digits dot 3 digits

^\d{6}((\.\d{3}$)|$)

将匹配6 digits or 6 digits dot 3 digits

Rubular是你的朋友!

答案 3 :(得分:1)

匹配此正则表达式:

"^\d{6}((\.\d{3}$)|$)"

答案 4 :(得分:1)

我想你想要这样的东西:

"^\d{6}(\.\d{3})?$"

你需要逃避“点”,因为它是正则表达式中的“任何”字符。