8

コード:

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

エラー :

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

私はここで何が間違っているのですか?

4

2 に答える 2

25

一致したテキストについてクエリを実行したり、テキストを操作したりする関連関数(、、、など)を呼び出す前find()に、を呼び出す必要があります。Matchergroup()start()end()appendReplacement(StringBuffer sb, String replacement)

だからあなたの場合:

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

これにより、最初の一致(存在する場合)が検出され、正規表現に一致する最初のキャプチャグループが抽出されます。入力文字列内のすべての一致を検索する場合は、ループに変更ifします。while

于 2013-03-01T08:06:58.690 に答える
3

呼び出す前に、この行を追加する必要がありますgroup()

m.find();

これにより、ポインタが次の一致の開始点に移動します(存在する場合)。一致が見つかった場合、メソッドはtrueを返します。

通常、これはあなたがそれを使用する方法です:

if (m.find()) {
    // access groups found. 
}
于 2013-03-01T08:07:06.773 に答える