0

使用正则表达式,(我正在使用 Autohotkey,即 PCRE)如何匹配 ini 文件的部分?我不需要获取单独的键 - 只需部分块。

我想出了这个,只要在寻找的部分之后有一个部分,它似乎就匹配,但如果它是最后一个部分,它就会失败。

iniregex := "ms)(?<=^\[keys\]).*(?=^\[)"

例如,我想获取该部分的全部内容[keys],同时排除注释并忽略空行(它应该捕获test=2,但是排除该行的注释:

[settings]
settings=0
;settings=1

[keys]
test=0
;test=1
test=2 ;comment
test=3
[nextsection]
this section has an empty and should be caught.

there is an empty line after this line, and it should be caught, too.

    eof

我找到了这个,但我不确定在哪里放置寻找的部分名称。

4

2 回答 2

1

从您链接的问题中,您可以在此处输入所寻求的部分名称:

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

但是,我认为您无法在与捕获相同的正则表达式中删除注释。您必须在第二步中执行此操作。

如果后面没有部分,则您的正则表达式将失败,[keys]因为您需要为下一部分放置“0 或更多”类型量词。就像是:

iniregex := "ms)(?<=^\[keys\]).*(?:(?=^\[))?"

于 2013-03-18T01:58:24.603 回答
1

您无法使用单个正则表达式来实现此目的。

您可以做的是根据您的报价使用此正则表达式来提取[keys]部分而不包括[keys]标签:

/^(?<=\[keys\]\r\n)(?:(?!^\[).)*(?=\r\n)/ms

之后,您可以将此正则表达式用于提取的部分以排除注释/空白行:

/^[^;\s][^;\r\n]*/gm
于 2013-03-18T02:24:44.333 回答