0

入力文字列から名前付きデータを抽出する際、Matcher.group(String groupname) http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.htmlを使用します。

以下のコードでは、receivedData はグループの名前を持つハッシュマップです。各名前を取得するためにそれを反復処理してから、group(name) を呼び出す必要があります。ハッシュマップは個別に維持する必要があり、多数の名前があるため、名前が間違って入力されたり、正規表現の名前と同期しなくなる可能性があります。

String patternOfData = "On (day) I ate (mealName) at (restaurant) where they had a deal (entree) for only (price)";

パターンをコンパイルした後、

Pattern dataExtractionPattern = Pattern.compile(patternOfData);

Matcher matcher = dataExtractionPattern.matcher(receivedDataString);
                boolean b = matcher.matches();
                if (!b) {
                    return false;
                }
                for (String key : receivedData.keySet()) {
                    String dataValue;
                    dataValue = matcher.group(key);
                    receivedData.put(key, dataValue);
                }
                return true;

名前と値の両方が一緒に返された方がよいのではないでしょうか? Map.entry group(); と同様です。

または、これを行う別の方法はありますか?

4

1 に答える 1

1

まず、Java 7 で新たに利用可能になった名前付きキャプチャ グループは (?< NAME > PATTERN ) のようになります。ここで、NAMEはグループの名前で、PATTERNは一致するパターンです。したがって、正規表現の例は次のようになりますOn (?<day>\S+) I ate (?<mealName>\S+)...

パターンが固定されている場合、グループ名の固定リストを作成できない理由はありません。次にreceivedData、正しいキーで既に設定されている必要はなく、それらのグループ名を反復してゼロから構築することができます。

于 2013-01-03T17:59:41.313 に答える