StepTNT
StepTNT

Reputation: 3967

Regex matching in online tester but not in JAVA

I'm trying to extract the text BetClic from this string popup_siteinfo(this, '/click/betclic', '373', 'BetClic', '60€');

I wrote a simple regex that works on Regex Tester but that doesn't work on Java.

Here's the regex

'\d+', '(.*?)'

here's Java output

Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:485)
at javaapplication1.JavaApplication1.main(JavaApplication1.java:74)
Java Result: 1

and here's my code

Pattern pattern = Pattern.compile("'\\d+', '(.*?)'");
Matcher matcher = pattern.matcher(onMouseOver);                
System.out.print(matcher.group(1));

where the onMouseOver string is popup_siteinfo(this, '/click/betclic', '373', 'BetClic', '60€');

I'm not an expert with regex, but I'm quite sure that mine isn't wrong at all!

Suggestions?

Upvotes: 0

Views: 657

Answers (2)

exexzian
exexzian

Reputation: 7890

You're calling group(1) without having first called a matching operation (such as find()).- which is the cause of IllegalStateException.

And if you have to use that grouped cases for replacement then this isn't needed if you're just using $1 since the replaceAll() is the matching operation.

Upvotes: 0

Bart Kiers
Bart Kiers

Reputation: 170227

You need to call find() before group(...):

Pattern pattern = Pattern.compile("'\\d+', '(.*?)'");
Matcher matcher = pattern.matcher(onMouseOver);                
if(matcher.find()) {
  System.out.print(matcher.group(1));
}
else {
  System.out.print("no match");
}

Upvotes: 3

Related Questions