Java 正则表达式是否与字符串完全匹配?

Java 正则表达式是否与字符串完全匹配?,java,regex,Java,Regex,在这个问题之前,我会提到,虽然我远非正则表达式大师,但它们对我来说并不完全陌生。构建正则表达式来搜索特定字符串中的模式对我来说通常不是问题,但我有一个(可能?)独特的情况 我有一组值,比如: 028938 DEF567987 390987.456 GHI345928.039 我想匹配一组特定的字符串,例如: 正好由6位数字组成的字符串 由正好6位数字组成的字符串,一个十进制数,后跟正好3位以上的数字 在上述示例中,应匹配第一个值和第三个值 我正在使用正则表达式: [0-9]{6} [0-9]

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

我有一组值,比如:

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}$
参考:

此外,正如Mikael Svenson所指出的,如果要在较大的文本块中搜索此模式,可以使用单词boundary
\b

参考:

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

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

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

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

此外,正如Mikael Svenson所指出的,如果要在较大的文本块中搜索此模式,可以使用单词boundary
\b

参考:

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

^\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

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

^[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{3}$)|$)"
匹配此正则表达式:

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

我想你想要这样的东西:

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

您需要对“点”进行转义,因为它是regexp中的“any”字符。

我想您需要这样的内容:

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

您需要转义“点”,因为它是regexp中的“any”字符。

如何使用这些正则表达式?如果使用的是
Matcher.matches()
String.matches()
,则不需要开始或结束锚定,但如果使用的是
Matcher.find()
,则需要开始或结束锚定。你还需要逃出点(
“[0-9]{6}\\.[0-9]{3}”
)。模式“锚定”是
^
$
所调用的。你没有逃出点,所以它将匹配许多你可能不想要的东西,请参阅我的答案以获得一个真正有用的基于web的正则表达式工具,并链接到测试以获取我的答案。谢谢,我不知道点被当作一个特殊的字符。你是如何使用这些正则表达式的?如果使用的是
Matcher.matches()
String.matches()
,则不需要开始或结束锚定,但如果使用的是
Matcher.find()
,则需要开始或结束锚定。你还需要逃出点(
“[0-9]{6}\\.[0-9]{3}”
)。模式“锚定”是
^
$
所调用的。你没有逃出点,所以它将匹配许多你可能不想要的东西,请参阅我的答案以获得一个真正有用的基于web的正则表达式工具,并链接到测试以获取我的答案。谢谢,我没有意识到圆点被视为一个特殊的角色。这并不能满足他想要的,你需要逃避现实dot@fuzzy:对。。你可以编辑这个问题,使之恰当:)它将按如下方式工作。for通配符也将匹配一个点;)但是,如果有错误的答案,它当然也会匹配错误的答案。问题是错误的,需要保持错误,这是问题的一部分,他有错误的语法,修复他的问题不会让有相同问题的人理解正确的答案answers@fuzzy:问题是关于匹配图案/线条的起点和终点,不是怎么回事。通配符有效。否问题是如何将输入与正则表达式精确匹配,未转义的do阻止了精确匹配,开始和结束标记是正确答案的一个障碍。他的例子没有做他认为它在做的事情,需要纠正以获得一个完全有用的正确解决方案。这不会做他想要做的事情,你需要逃避现实dot@fuzzy:对。。你可以编辑这个问题,使之恰当:)它将按如下方式工作。for通配符也将匹配一个点;)但是,如果有错误的答案,它当然也会匹配错误的答案。问题是错误的,需要保持错误,这是问题的一部分,他有错误的语法,修复他的问题不会让有相同问题的人理解正确的答案answers@fuzzy:问题是关于匹配图案/线条的起点和终点,不是怎么回事。通配符有效。否问题是如何将输入与正则表达式精确匹配,未转义的do阻止了精确匹配,开始和结束标记是正确答案的一个障碍。他的例子没有做他认为它在做的事情,需要纠正以获得一个完全有用的正确解决方案。你的答案是错误的