使用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
  • $ 字符串结束

正则表达式演示


以上是使用PCRE正则表达式解析多行ini之类的文件的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>