为什么这个正则表达式在Java中没有像预期的那样工作?

时间:2011-01-25 09:54:14

标签: java regex

琐碎的正则表达式问题(答案很可能是特定于Java的):

"#This is a comment in a file".matches("^#")

返回false。据我所知,^表示它总是意味着什么,而#没有特殊含义,所以我将^#翻译为字符串开头的“A”#' ”。哪个应该匹配。在Perl中它确实如此:

perl -e "print '#This is a comment'=~/^#/;"

打印“1”。所以我很确定答案是Java特有的。有人请赐教我吗?

谢谢。

3 个答案:

答案 0 :(得分:17)

Matcher.matches()检查整个输入字符串是否与正则表达式匹配。

由于您的正则表达式仅与第一个字符匹配,因此返回false

您需要改为使用Matcher.find()

当然,找到具体的规范可能有点棘手,但它就在那里:

答案 1 :(得分:2)

matches方法将您的正则表达式与整个字符串相匹配。

因此,请尝试添加.*以匹配字符串的其余部分。

"#This is a comment in a file".matches("^#.*")

返回true。甚至可以从正则表达式中删除所有锚点(包括开始和结束),match方法将为我们添加它。因此,在上述情况下,我们也可以使用"#.*"作为正则表达式。

答案 2 :(得分:0)

这应符合您的期望:

"#This is a comment in a file".matches("^#.*$")

现在输入字符串匹配模式“First char应为#,其余字符应为任何字符”


根据Joachims的评论,以下内容是等效的:

"#This is a comment in a file".matches("#.*")