gpt4 book ai didi

java - 匹配 INI 节 block

转载 作者:行者123 更新时间:2023-12-01 17:40:23 35 4
gpt4 key购买 nike

我正在使用正则表达式来尝试匹配 INI 文件中的节 block 。我正在使用书中给出的食谱Regular Expressions Cookbook ,但它似乎对我不起作用。

这是我正在使用的代码:

final BufferedReader in = new BufferedReader(
new FileReader(file));
String s;
String s2 = "";
while((s = in.readLine())!= null)
s2 += s + System.getProperty("line.separator");
in.close();

final String regex = "^\\[[^\\]\r\n]+](?:\r?\n(?:[^\r\n].*)?)*";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
String sectionBlock = null;
final Matcher regexMatcher = pattern.matcher(s2);
if (regexMatcher.find()) {
sectionBlock = regexMatcher.group();
}

这是我的输入文件的内容:

[Section 2]
Key 2.0=Value 2.0
Key 2.2=Value 2.2
Key 2.1=Value 2.1

[Section 1]
Key 1.1=Value 1.1
Key 1.0=Value 1.0
Key 1.2=Value 1.2

[Section 0]
Key 0.1=Value 0.1
Key 0.2=Value 0.2
Key 0.0=Value 0.0

问题是 sectionBlock 最终等于文件的整个内容,而不仅仅是第一部分。

(我不知道这是否重要,但我在 Windows 上执行此操作,并且 s2 中的行分隔符等于“\r\n”(至少,这就是IDEA 调试器将它们显示为)。)

我在这里做错了什么?

最佳答案

试试这个正则表达式:

(?ms)^\[[^]\r\n]+](?:(?!^\[[^]\r\n]+]).)*

或 Java 字符串文字正则表达式:

"(?ms)^\\[[^]\r\n]+](?:(?!^\\[[^]\r\n]+]).)*"

(简短)解释:

(?ms)          // enable multi-line and dot-all matching
^ // the start of a line
\[ // match a '['
[^]\r\n]+ // match any character except '[', '\r' and '\n', one or more times
] // match a ']'
(?: // open non-capturing group 1
(?! // start negative look-ahead
^ // the start of a line
\[ // match a '['
[^]\r\n]+ // match any character except '[', '\r' and '\n', one or more times
] // match a ']'
) // stop negative look-ahead
. // any character (including line terminators)
)* // close non-capturing group 1 and match it zero or more times

用简单的英语来说,它可以读作:

Match a '[' followed by one or more characters except '[', '\r' and '\n', followed by a ']' (let's call this match X). Then for every empty String in the text, first look ahead to see if you don't see a match X, if you don't, then match any character.

关于java - 匹配 INI 节 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1561508/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com