我知道^和$的意思是“匹配行的开头”和“匹配行尾” 但是,当我今天进行一些编码时,我没有注意到它们包含它们并将它们排除在Java中使用的正则表达式之间有任何区别。
例如,我想使用
匹配正整数^[1-9]\\d*$
,当我将它们排除在正则表达式中时,如
[1-9]\\d*
,似乎没有区别。我试图使用一个“包含”整数的字符串来测试@@@ 123 @@@,而第二个正则表达式仍然可以识别它与第一个一样无效。
上面的两个正则表达式完全等于另一个正则表达式吗?谢谢!
答案 0 :(得分:0)
您是否需要搜索2343
,[SPACE]2345
或abc234
等字符串?
锚定的正则表达式只会在第一个字符串中找到该数字。未锚定的将在所有字符串中找到它们。
这完全取决于您的要求。您是在分析文本文件中的行,其中每行包含仅数字?,或者您是在分析散文文档或源代码中的文本,其中数字可能散布在一大堆其他行中东西?
在前一种情况下,锚是好的。在后者中,它们很糟糕。
答案 1 :(得分:0)
它们不同,第一个输入检查整行,所以从行的开始到结束,第二个不关心行。
如需更多检查:regex-bounds
答案 2 :(得分:0)
嗯......不,正则表达式不等同。他们也没有做你认为的那样。
您打算匹配一个正数 - 正则表达式的目的是匹配1到9之间的某个字符,然后匹配任意数量的数字字符(包括零)。
两者之间的区别在于锚定,正如您所指出的那样 - 第一个正则表达式只匹配从1到9开始的值,然后是零或更多的数字,然后期望字符串中没有其他内容
正确的正则表达式匹配字符串中的任何正数 ,如下所示:
[1-9]*\\d*
...正确的正则表达式匹配任何正数的行将是:
^[1-9]*\\d*$