1

ユーザーが指定した正規表現に基づいて文字列から日付を取得するコードのチャンクがあります。システムを構成する方法はいくつかありますが、一般的にユーザーにとって最も便利なのは、名前付きのキャプチャグループを指定するだけで、コードから日付を抽出することです。例えば:

Input: ABC-20130308
Regex: ABC-(?<date>\d{8})

コードは本当に単純です:

Pattern p = Pattern.compile( regex );
Matcher m = p.matcher( input );
m.find();
m.group( "date" );

問題は、ユーザーが名前付きグループを指定しない場合m.group("date")、IllegalArguementExceptionで爆発することです。

私はこの例外を非常に簡単にキャッチして、日付を取得するための代替方法を試すことができますが、それは基本的に制御フローの例外を使用しています。グループを取得する前に、グループの存在をテストしたいと思います。パターン内の名前付きグループの存在を確認する方法を見逃したことがありますか?

4

2 に答える 2

1

java.util.regex.Matcher.group(String name)を投げる

IllegalArgumentException-指定された名前のパターンにキャプチャグループがない場合

groupCount()したがって、おそらく基本的なチェックを行うために使用できます。しかし、私はあなたがを処理しなければならないことを恐れていますIllegalArgumentException

于 2013-03-08T09:10:01.903 に答える
0

グループ名が含まれているかどうかを確認するパターン (ユーザーによって提供され、最初はプレーンな文字列として処理される) に対して正規表現の一致を実行するのはどうですか?

など.*\(?<date>.+\).*

于 2013-03-08T09:15:22.777 に答える