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

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

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

028938
DEF567987
390987.456
GHI345928.039

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

  • 字符串由6位数字组成
  • 字符串由正好6位数字组成,一个十进制数字,后跟正好3个数字

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

我正在使用正则表达式:

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

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

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

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

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

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

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

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

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

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

你可以使用^来要求在行的开头匹配,而$要求行的结束

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

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

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

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

 \btest\b 

将匹配此行中的单词test

 this is a test for matching 
 ^\d{6}$ ^\d{6}\.\d{3}$ 

是正确的模式,你可以测试他们只有 6位数和6位数点3位数 。

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

将匹配6位数或6位数字点3位数

Rubular是你的朋友!

匹配这个正则表达式:

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

我想你想要这样的东西:

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

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