使用PCRE正则表达式解析多行ini之类的文件
我有一个类似 ini 的文件,其中有<key> = <value>项目列表。使事情复杂化的是某些值是多行的并且可以包含=字符(tls 私钥)。例子:
groupid = foo
location = westus
randomkey = fbae3700c34cb06c
resourcename = example4-resourcegroup
tls_private_key = -----BEGIN RSA PRIVATE KEY-----
//stuff
-----END RSA PRIVATE KEY-----
foo = 123
faa = 223
到目前为止,我所拥有的模式是这样的/^(.*?) = (.*[^=]*)$/m,它适用于除 tls_private_key 之外的所有键,因为它包含=所以它只获取部分值。
有什么建议?
回答
您可以匹配多行上的所有值,断言下一行不包含空格等号空格:
^(.*?) = (.*(?:R(?!.*? = ).*)*)
正则表达式演示
如果键不能有空格:
^([^s=]+)h+=h+(.*(?:R(?![^s=]+h+=h+).*)*)$
解释
^字符串的开始([^s=]+)捕获组 1,匹配 1+ 个字符=或空白字符以外的字符h+=h+=在空格之间匹配一个(捕获组 2.*匹配整行(?:R(?![^s=]+h+=h+).*)*重复以下所有不包含空格 = 空格的行
)关闭捕获组 2$字符串结束
正则表达式演示