This question already has an answer here:
- Simple Java regex matcher not working 2 answers
Im trying to do a quick sanity check... and its failing. Here is my code -
import java.util.regex.*;
public class Tester {
public static void main(String[] args) {
String s = "a";
Pattern p = Pattern.compile("^(a)$");
Matcher m = p.matcher(s);
System.out.println("group 1: " +m.group(1));
}
}
And what I would expect is to see group 1: a
. But instead I get an IllegalStateException: no match found
and I have no idea why.
Edit: I also tries printing out groupCount()
and it says there is 1.
You need to invoke m.find()
or m.matches()
first to be able to use m.group
.
find
can be used to find each substring that matches your pattern (used mainly in situations where there is more than one match)matches
will check if entire string matches your pattern so you wont even need to add^
and$
in your pattern.
We can also use m.lookingAt()
but for now lets skip its description (you can read it in documentation).
Use Matcher#matches or Matcher#find prior to invoking Matcher.group(int)
if (m.find()) {
System.out.println("group 1: " +m.group(1));
}
In this case Matcher#find
is more appropriate as Matcher#matches
matches the complete String
(making the anchor characters redundant in the matching expression)
Look at the javadocs for Matcher
. You will see that "attempting to query any part of it before a successful match will cause an IllegalStateException to be thrown".
Wrap your group(1)
call with if (matcher.find()) {}
to resolve this problem.
来源:https://stackoverflow.com/questions/18257561/simple-java-regex-throwing-illegalstateexception