我有一个类似 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
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所拥有的模式是这样的/^(.*?)\ \=\ (.*[^=]*)$/m,它适用于除 tls_private_key 之外的所有键,因为它包含=所以它只获取部分值。
有什么建议?
您可以匹配多行上的所有值,断言下一行不包含空格等号空格:
^(.*?) = (.*(?:\R(?!.*? = ).*)*)
Run Code Online (Sandbox Code Playgroud)
如果键不能有空格:
^([^\s=]+)\h+=\h+(.*(?:\R(?![^\s=]+\h+=\h+).*)*)$
Run Code Online (Sandbox Code Playgroud)
解释
^ 字符串的开始([^\s=]+)捕获组 1,匹配 1+ 个字符=或空白字符以外的字符\h+=\h+=在空格之间匹配一个(捕获组 2
.* 匹配整行(?:\R(?![^\s=]+\h+=\h+).*)* 重复以下所有不包含空格 = 空格的行) 关闭捕获组 2$ 字符串结束| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |