Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java regex matcher not matching

My String:

<a href="https://MYURL/browse/TEST-53">FOO.BAR</a></p>

Code:

Pattern pattern = Pattern.compile("(browse/)(.*)(\">)");
Matcher matcher = pattern.matcher(match);

return matcher.group(1);

Getting error:

java.lang.IllegalStateException: No match found

Tested my regex here, it does match:

http://regexpal.com/?flags=g&regex=(browse%2F)(.*)(%5C%22%3E)&input=%3Ca%20href%3D%22https%3A%2F%2FMYURL%2Fbrowse%2FTEST-53%22%3EFOO.BAR%3C%2Fa%3E%3C%2Fp%3E
like image 612
Jaanus Avatar asked Dec 02 '22 23:12

Jaanus


2 Answers

You first need to do

matcher.find()

to trigger the actual search. Usually like this:

Pattern pattern = Pattern.compile("(browse/)(.*)(\">)");
Matcher matcher = pattern.matcher(match);
if (matcher.find()) 
    return matcher.group(1);

You should probably be using a different regex, though:

Pattern pattern = Pattern.compile("browse/([^<>\"]*)\">");

will be safer and more efficient (and provide the correct value in group number 1).

like image 54
Tim Pietzcker Avatar answered Dec 12 '22 06:12

Tim Pietzcker


You have to call Matcher.find() or Matcher.matches() before you extract groups.

In your exact case you should call Matcher.find(), since your regex won't match against the entire input, which is what Matcher.matches() checks for.

like image 25
Tom McIntyre Avatar answered Dec 12 '22 06:12

Tom McIntyre