Windowsの下でJavaを使用してWindows iniファイルを解析しようとしています。コンテンツが次のとおりであると仮定します。
[section1]
key1=value1
key2=value2
[section2]
key1=value1
key2=value2
[section3]
key1=value1
key2=value2
次のコードを使用します。
Pattern pattSections = Pattern.compile("^\\[([a-zA-Z_0-9\\s]+)\\]$([^\\[]*)", Pattern.DOTALL + Pattern.MULTILINE);
Pattern pattPairs = Pattern.compile("^([a-zA-Z_0-9]+)\\s*=\\s*([^$]*)$", Pattern.DOTALL + Pattern.MULTILINE);
// parse sections
Matcher matchSections = pattSections.matcher(content);
while (matchSections.find()) {
String keySection = matchSections.group(1);
String valSection = matchSections.group(2);
// parse section content
Matcher matchPairs = pattPairs.matcher(valSection);
while (matchPairs.find()) {
String keyPair = matchPairs.group(1);
String valPair = matchPairs.group(2);
}
}
しかし、それは正しく動作しません:
section1 が一致しません。これはおそらく、これが「after EOL」から始まっていないためです。空の文字列を前に置くと、
[section1]
一致します。'\r\ nke1
valSection
=value1\r\nkey2=value2\r\n' を返します。はkeyPair
「key1」を返します。大丈夫みたいです。ただし、valPair
「value1\r\nkey2=value2\r\n」は返されますが、「value1」は返されません。
ここで何が問題なのですか?