正则表达式:将ini部分作为字符串返回

时间:2013-03-18 00:39:20

标签: regex ini

使用正则表达式(我使用的是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

I found this,但我不确定在哪里放置所寻找的部分名称。

2 个答案:

答案 0 :(得分:1)

根据您的关联问题,您可以将搜索到的部分名称放在此处:

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

但是,我不认为你能够在与捕获相同的正则表达式中删除注释。你必须在第二步中做到这一点。

如果[keys]之后没有任何部分,则正则表达式会失败,因为您需要为下一部分添加“0或更多”类型量词。类似的东西:

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

答案 1 :(得分:1)

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

您可以使用此正则表达式根据您的引用提取[keys]部分而不包含[keys]标记:

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

之后,您可以使用this regexp对提取的部分排除评论/空白行:

/^[^;\s][^;\r\n]*/gm