I have an odd problem with a regular expression in Java. I tested my Regex and my value here and it works. It says there are 3 groups (correct) the match for the first group (not group zero!) is SSS, the match for group 2 is BB and the match for group 3 is 0000. But my code below fails and I am quite at a loss why…
String pattern = "([^-]*)-([\D]*)([\d]*)";
String value = "SSS-BB0000";
Matcher matcher = Pattern.compile(pattern).matcher(value);
//group() is equivalent to group(0) - it fails to match though
matcher.group();
Here is a screenshot from the matching result of the above website:
I’d be really grateful if anyone could point out the mistake I am making… On an additional note: Strangely enough, if I execute the following code true is returned which implies a match should be possible…
//returns true
Pattern.matches(pattern, value);
Advertisement
Answer
You need to call find()
before group()
:
String pattern = "([^-]*)-([\D]*)([\d]*)";
String value = "SSS-BB0000";
Matcher matcher = Pattern.compile(pattern).matcher(value);
if (matcher.find()) {
System.out.println(matcher.group()); // SSS-BB0000
System.out.println(matcher.group(0)); // SSS-BB0000
System.out.println(matcher.group(1)); // SSS
System.out.println(matcher.group(2)); // BB
System.out.println(matcher.group(3)); // 0000
}
When you invoke matcher(value)
, you are merely creating a Matcher
object that will be able to match your value
. In order to actually scan the input, you need to use find()
or lookingAt()
: