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

Cra*_*tis 15 java regex

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

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

028938
DEF567987
390987.456
GHI345928.039

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

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

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

我正在使用正则表达式:

[0-9]{6}
[0-9]{6}.[0-9]{3}
Run Code Online (Sandbox Code Playgroud)

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

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

Caf*_*eek 44

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

^[0-9]{6}$
^[0-9]{6}\.[0-9]{3}$
Run Code Online (Sandbox Code Playgroud)

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

此外,正如Mikael Svenson所指出的,\b如果您在更大的文本块中搜索此模式,则可以使用单词边界.

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

你也可以一次写下这两个正则表达式

^\d{6}(\.\d{3})?$
Run Code Online (Sandbox Code Playgroud)

  • @fuzzy:使用`[0-9]`而不是`\ d`不一定是错误.特别是在Java中,它们的意思完全相同. (3认同)

Mik*_*son 5

您可以使用^要求在行首匹配并$要求在行尾匹配

^[0-9]{6}\.[0-9]{3}$
Run Code Online (Sandbox Code Playgroud)

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

^\d{6}\.\d{3}$
Run Code Online (Sandbox Code Playgroud)

\b如果您想在一行中匹配您的模式,您也可以用于单词边界,例如。其中的空间

\btest\b
Run Code Online (Sandbox Code Playgroud)

将匹配test此行中的单词

this is a test for matching
Run Code Online (Sandbox Code Playgroud)