我会提到这个问题,虽然我远离正规表达大师,但对我来说并不完全陌生。构建一个正则表达式来搜索特定字符串中的模式通常对我来说不是问题,但我有一个(可能是?)独特的情况。
我有一组价值观,比如说:
028938
DEF567987
390987.456
GHI345928.039
我想匹配一组特定的字符串,例如:
在上面的例子中,第一个和第三个值应该匹配。
我正在使用正则表达式:
[0-9]{6}
[0-9]{6}.[0-9]{3}
不幸的是,由于以上所有示例都包含指定的模式,因此所有值都匹配。这不是我的意图。
所以我的问题,简而言之,就是如何编写一个完全匹配字符串的正则表达式,匹配模式的右侧或左侧没有其他字符?这种匹配是否有术语? (谷歌没有帮助。)TIA
答案 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 only和6 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})?$"
你需要逃避“点”,因为它是正则表达式中的“任何”字符。