形式の文字列を解析する正規表現を作成しました
OBJECT_NAME KEY1=値 KEY2=値
(実際には 2 つの正規表現によって行われます)
これは私のユーティリティクラスです:
package de.hs.settlers.util;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ParseUtils {
public static final Pattern OBJECT_NAME_PATTERN =
Pattern.compile("^([A-Z0-9 ]+) ([A-Z]+=.+)$");
public static final Pattern KEY_VALUE_PATTERN =
Pattern.compile("^([A-Z0-9]+)=([^=]+)( [A-Z]+=.+)?$");
public static ParseResult parseKeyValueLine(String line) {
Matcher object = OBJECT_NAME_PATTERN.matcher(line.trim());
String objectName = object.group(1);
HashMap<String, String> data = new HashMap<String, String>();
String vals = object.group(2);
do {
Matcher matcher = KEY_VALUE_PATTERN.matcher(vals);
if (!matcher.matches()) {
break;
}
String key = matcher.group(1);
String value = matcher.group(2);
data.put(key, value);
vals = matcher.group(3);
if (vals != null) {
vals = vals.trim();
}
} while (vals != null);
return new ParseResult(objectName, data);
}
public static class ParseResult {
private String objectName;
private HashMap<String, String> data;
public ParseResult(String objectName, HashMap<String, String> data) {
super();
this.objectName = objectName;
this.data = data;
}
public String getObjectName() {
return objectName;
}
public HashMap<String, String> getData() {
return data;
}
public String get(String key) {
return getData().get(key);
}
}
}
行引数として「USER TEAM=Team A USER=tuxitux OTHER=bla」を使用してメソッド parseKeyValueLine をテストするテストを作成しましたが、最初の式 (OBJECT_NAME_PATTERN の式) が明らかに一致しなかったため、実行は失敗します。
私が抱えている問題は、式と文字列を貼り付けて正規表現デバッガーにテストすると、それらはすべて一致すると言って正しいグループを教えてくれることです。( http://gskinner.com/RegExr/およびhttp://www.debuggex.com/でテスト済み)。
Javaが正規表現を行う方法に問題はありますか?