Reputation: 1572
Following regex giving me java.lang.IllegalStateException: No match found
error
String requestpattern = "^[A-Za-z]+ \\/+(\\w+)";
Pattern p = Pattern.compile(requestpattern);
Matcher matcher = p.matcher(requeststring);
return matcher.group(1);
where request string is
POST //upload/sendData.htm HTTP/1.1
Any help would be appreciated.
Upvotes: 16
Views: 20482
Reputation: 135752
No match has been attempted. Call find()
before calling group()
.
public static void main(String[] args) {
String requeststring = "POST //upload/sendData.htm HTTP/1.1";
String requestpattern = "^[A-Za-z]+ \\/+(\\w+)";
Pattern p = Pattern.compile(requestpattern);
Matcher matcher = p.matcher(requeststring);
System.out.println(matcher.find());
System.out.println(matcher.group(1));
}
Output:
true
upload
Upvotes: 44
Reputation: 49362
The Matcher#group(int) throws :
IllegalStateException - If no match has yet been attempted, or if the
previous match operation failed.
Upvotes: 3
Reputation: 46423
Your expression requires one or more letters, followed by a space, followed by one or more forward slashes, followed by one or more word characters. Your test string doesn't match. The exception is triggered because you're trying to access a group on a matcher that returns no matches.
Your test string matches up to the slash after "upload", because the slash isn't matched by \w
, which only includes word characters. Word characters are letters, digits, and underscores. See: http://www.regular-expressions.info/charclass.html#shorthand
Upvotes: 0