使用正则表达式(我使用的是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,但我不确定在哪里放置所寻找的部分名称。
答案 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