^Java正则表达式中的$

^Java正则表达式中的$,java,regex,Java,Regex,我知道^and$表示“匹配行首”和“匹配行尾” 然而,当我今天进行一些编码时,我没有注意到在Java中使用的正则表达式中包含它们和排除它们之间的任何区别 例如,我想使用 ^[1-9]\\d*$ ,当我在正则表达式中排除它们时 [1-9]\\d* ,似乎没有区别。我尝试使用“包含”一个整数(如@@@123@)的字符串进行测试,第二个正则表达式仍然可以识别它与第一个正则表达式一样无效 那么上面的两个正则表达式是否完全等于另一个?谢谢 是否需要搜索像2343或[SPACE]2345或abc234这

我知道^and$表示“匹配行首”和“匹配行尾” 然而,当我今天进行一些编码时,我没有注意到在Java中使用的正则表达式中包含它们和排除它们之间的任何区别

例如,我想使用

^[1-9]\\d*$
,当我在正则表达式中排除它们时

[1-9]\\d*
,似乎没有区别。我尝试使用“包含”一个整数(如@@@123@)的字符串进行测试,第二个正则表达式仍然可以识别它与第一个正则表达式一样无效


那么上面的两个正则表达式是否完全等于另一个?谢谢

是否需要搜索像
2343
[SPACE]2345
abc234
这样的字符串

锚定正则表达式将只在第一个字符串中找到数字。联合国将在所有字符串中找到它们

这完全取决于你的要求是什么。您是在分析文本文件中的行,其中每一行只包含数字?还是在分析散文文档或源代码中的文本,其中数字可能散布在一大堆其他内容中

在前一种情况下,锚是好的。在后者中,它们是坏的


更多信息:

它们不同,第一个输入检查整行,因此从行的开始到结束,第二个输入不关心行


更多检查:

嗯……不,正则表达式不是等价的。他们也没有做你认为他们是的事

您打算匹配一个正数-正则表达式的目标是匹配1到9之间的某个字符,然后匹配其后的任意数量的数字字符(包括零)

正如您所注意到的,两者之间的区别在于锚定-第一个正则表达式将只匹配从1到9开始的值,然后是零或更多数字,然后期望字符串中没有其他内容

匹配字符串中任何位置的正数的正确正则表达式如下所示:

[1-9]*\\d*
…与任何正数行匹配的正确正则表达式如下:

^[1-9]*\\d*$

如果正则表达式匹配器一开始没有锚定,则会有不同:显示使用正则表达式的代码。(另外,
^
$
的行为不是严格基于行的,请参见。)使用哪种方法?它是匹配还是查找?如果您使用了
String#matches
方法,那么您将匹配整个字符串,而不管
^
$
。这将匹配0000000,这不是一个正数。我的意思是要将其放在OP上。不过,答案是正确的,谢谢。