Ananda
Ananda

Reputation: 1572

Java RegEx no match found error

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

Answers (3)

acdcjunior
acdcjunior

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

AllTooSir
AllTooSir

Reputation: 49362

The Matcher#group(int) throws :

IllegalStateException - If no match has yet been attempted, or if the 
previous match operation failed.

Upvotes: 3

Adrian
Adrian

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

Related Questions