我尝试在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);
}
}
但它不能正常工作:
第 1 节不匹配。这可能是因为这不是从“EOL 之后”开始的。当我在 then 之前放置空字符串时,
[section1]
它匹配。valSection
返回 '\r\nke1=value1\r\nkey2=value2\r\n' 。keyPair
返回'key1' 。看起来还可以。但valPair
返回 'value1\r\nkey2=value2\r\n' 但不是根据需要返回 'value1'。
这里有什么问题?