simple java regex throwing illegalstateexception [duplicate]

Solution 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).

Solution 2:

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)

Solution 3:

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.