琐碎的正则表达式问题(答案很可能是特定于Java的):
"#This is a comment in a file".matches("^#")
返回false。据我所知,^
表示它总是意味着什么,而#
没有特殊含义,所以我将^#
翻译为字符串开头的“A”#' ”。哪个应该匹配。在Perl中它确实如此:
perl -e "print '#This is a comment'=~/^#/;"
打印“1”。所以我很确定答案是Java特有的。有人请赐教我吗?
谢谢。
答案 0 :(得分:17)
Matcher.matches()
检查整个输入字符串是否与正则表达式匹配。
由于您的正则表达式仅与第一个字符匹配,因此返回false
。
您需要改为使用Matcher.find()
。
当然,找到具体的规范可能有点棘手,但它就在那里:
String.matches()
被定义为与Pattern.matches(regex, str)
做同样的事情。Pattern.matches()
依次定义为Pattern.compile(regex).matcher(input).matches()
。
Pattern.compile()
会返回Pattern
。Pattern.matcher()
返回Matcher
Matcher.matches()
记录如下(强调我的):
尝试将整个区域与模式匹配。
答案 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("#.*")