Java正则表达式中的^和$

时间:2014-02-23 20:47:28

标签: java regex

我知道^和$的意思是“匹配行的开头”和“匹配行尾” 但是,当我今天进行一些编码时,我没有注意到它们包含它们并将它们排除在Java中使用的正则表达式之间有任何区别。

例如,我想使用

匹配正整数
^[1-9]\\d*$

,当我将它们排除在正则表达式中时,如

[1-9]\\d*

,似乎没有区别。我试图使用一个“包含”整数的字符串来测试@@@ 123 @@@,而第二个正则表达式仍然可以识别它与第一个一样无效。

上面的两个正则表达式完全等于另一个正则表达式吗?谢谢!

3 个答案:

答案 0 :(得分:0)

您是否需要搜索2343[SPACE]2345abc234等字符串?

锚定的正则表达式只会在第一个字符串中找到该数字。未锚定的将在所有字符串中找到它们。

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

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

更多信息:http://www.regular-expressions.info/anchors.html

答案 1 :(得分:0)

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

如需更多检查:regex-bounds

答案 2 :(得分:0)

嗯......不,正则表达式不等同。他们也没有做你认为的那样。

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

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

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

[1-9]*\\d*

...正确的正则表达式匹配任何正数的行将是:

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