2013-03-01 25 views
6

Kod:Proste regex dopasowujący Java nie działa

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)); 
    } 
} 

Błąd:

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

Co robię źle tutaj?

Odpowiedz

16

Trzeba zadzwonić find() na Matcher zanim można wywołać group() i związane z nimi funkcje zapytań o dopasowanego tekstu lub manipulować (start(), end(), appendReplacement(StringBuffer sb, String replacement), itd.).

Więc w twoim przypadku:

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

ten znajdzie pierwszy mecz (jeśli istnieje) i wyodrębnić pierwszą grupę przechwytywania dopasowanego przez regex. Zmień pętlę if na while, jeśli chcesz znaleźć wszystkie dopasowania w łańcuchu wejściowym.

2

Należy dodać tę linię przed wywołaniem group():

m.find(); 

ten przesuwa kursor do początku następnego meczu, jeśli w ogóle - metoda zwraca true, jeśli zostanie znaleziony.

Zazwyczaj jest to jak go używać:

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