I have an ini like file where we have list of <key> = <value> items. What complicates things is that some values are multiline and can contain = character (tls private key).
Example:
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
What I have so far for pattern is this /^(.*?)\ \=\ (.*[^=]*)$/m and it works for all keys except the tls_private_key because it contains = so it only fetches partial value.
Any suggestions?
You might match all the values over mulitple lines, asserting that the next line does not contain a space equals sign space:
^(.*?) = (.*(?:\R(?!.*? = ).*)*)
Regex demo
If the key can not have spaces:
^([^\s=]+)\h+=\h+(.*(?:\R(?![^\s=]+\h+=\h+).*)*)$
Explanation
^ Start of string([^\s=]+) Capture group 1, match 1+ chars other than = or a whitespace char\h+=\h+ Match an = between spaces( Capture group 2
.* Match the whole line(?:\R(?![^\s=]+\h+=\h+).*)* Repeat all following lines that do not contain a space = space) Close capture group 2$ End of stringRegex demo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With