trivial regex question (the answer is most probably Java-specific):
"#This is a comment in a file".matches("^#")
This returns false. As far as I can see, ^
means what it always means and #
has no special meaning, so I'd translate ^#
as "A '#' at the beginning of the string". Which should match. And so it does, in Perl:
perl -e "print '#This is a comment'=~/^#/;"
prints "1". So I'm pretty sure the answer is something Java specific. Would somebody please enlighten me?
Thank you.
Matcher.matches()
checks to see if the entire input string is matched by the regex.Since your regex only matches the very first character, it returns
false
.You'll want to use
Matcher.find()
instead.Granted, it can be a bit tricky to find the concrete specification, but it's there:
String.matches()
is defined as doing the same thing asPattern.matches(regex, str)
.Pattern.matches()
in turn is defined asPattern.compile(regex).matcher(input).matches()
.Pattern.compile()
returns aPattern
.Pattern.matcher()
returns aMatcher
Matcher.matches()
is documented like this (emphasis mine):This should meet your expectations:
Now the input String matches the pattern "First char shall be
#
, the rest shall be any char"Following Joachims comment, the following is equivalent:
The
matches
method matches your regex against the entire string.So try adding a
.*
to match rest of the string.which returns
true
. One can even drop all anchors(both start and end) from the regex and thematch
method will add it for us. So in the above case we could have also used"#.*"
as the regex.