2013-05-02 18 views
6

seguente espressione regolare dandomi java.lang.IllegalStateException: No match found erroreJava RegEx nessuna corrispondenza trovata errore

String requestpattern = "^[A-Za-z]+ \\/+(\\w+)"; 
Pattern p = Pattern.compile(requestpattern); 
Matcher matcher = p.matcher(requeststring); 
return matcher.group(1); 

dove richiesta stringa è

POST //upload/sendData.htm HTTP/1.1 

Qualsiasi aiuto sarebbe apprezzato.

+0

'\ W' (carattere di parola) è' [A-Za-z0-9_] '. Non corrisponderà a "'/'", "' .' "o" '/' "(compaiono tutti dopo" '//' "). – acdcjunior

+0

Mi aspetto che dia l'upload come output – Ananda

+0

possibile duplicato di ["Nessuna corrispondenza trovata" quando si utilizza il metodo di gruppo del matcher] (http://stackoverflow.com/questions/5674268/no-match-found-when-using-matchers -gruppo-metodo) – anotherdave

risposta

24

Nessuna corrispondenza è stata tentata. Chiama find() prima di chiamare 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)); 
} 

uscita:

true 
upload 
0

L'espressione richiede una o più lettere, seguite da uno spazio, seguite da una o più barre in avanti, seguite da uno o più caratteri di parole. La tua stringa di prova non corrisponde. L'eccezione viene attivata perché stai tentando di accedere a un gruppo su un matcher che non restituisce corrispondenze.

La stringa di prova corrisponde alla barra dopo "upload", in quanto la barra non corrisponda \w, che include solo caratteri alfanumerici. I caratteri di Word sono lettere, cifre e caratteri di sottolineatura. Vedi: http://www.regular-expressions.info/charclass.html#shorthand

+0

Mi aspetto che dia l'upload come output – Ananda

2

Il Matcher#group(int) tiri:

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