2013-03-01 20 views
6

Codice:semplice Java espressione regolare matcher non funziona

import java.util.regex.*; 

public class eq { 
    public static void main(String []args) { 
     String str1 = "some=String&Here&modelId=324"; 
     Pattern rex = Pattern.compile(".*modelId=([0-9]+).*"); 
     Matcher m = rex.matcher(str1); 
     System.out.println("id = " + m.group(1)); 
    } 
} 

Errore:

Exception in thread "main" java.lang.IllegalStateException: No match found 

che cosa sto facendo male qui?

risposta

16

è necessario chiamare find() sul Matcher prima di poter chiamare group() e le relative funzioni che interroga circa il testo corrispondente o manipolarla (start(), end(), appendReplacement(StringBuffer sb, String replacement), etc.).

Quindi nel tuo caso:

if (m.find()) { 
    System.out.println("id = " + m.group(1)); 
} 

Questo troverà la prima partita(se presente) e estrarre il primo gruppo di cattura di pari passo con l'espressione regolare. Modificare il ciclo a while se si desidera trovare tutte le corrispondenze nella stringa di input.

2

È necessario aggiungere questa riga prima di chiamare group():

m.find(); 

Questo sposta il puntatore all'inizio della prossima partita, se del caso - il metodo restituisce true se viene trovata una corrispondenza.

Di solito, questo è come lo si utilizza:

if (m.find()) { 
    // access groups found. 
} 
Problemi correlati