ユーザーが指定した正規表現に基づいて文字列から日付を取得するコードのチャンクがあります。システムを構成する方法はいくつかありますが、一般的にユーザーにとって最も便利なのは、名前付きのキャプチャグループを指定するだけで、コードから日付を抽出することです。例えば:
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で爆発することです。
私はこの例外を非常に簡単にキャッチして、日付を取得するための代替方法を試すことができますが、それは基本的に制御フローの例外を使用しています。グループを取得する前に、グループの存在をテストしたいと思います。パターン内の名前付きグループの存在を確認する方法を見逃したことがありますか?