9.15. Match INI Name-Value Pairs
Problem
You want to match INI parameter name-value pairs (e.g.,
Item1=Value1),
separating each match into two parts using capturing groups.
Backreference 1 should contain the parameter name (Item1), and backreference 2 should contain the
value (Value1).
Solution
Here’s the regular expression to get the job done:
^([^=;\r\n]+)=([^;\r\n]*)
| Regex options: ^ and $ match at line breaks |
| Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby |
Or with free-spacing mode turned on:
^ # Start of a line ( [^=;\r\n]+ ) # Capture the name to backreference 1 = # Name-value delimiter ( [^;\r\n]* ) # Capture the value to backreference 2
| Regex options: ^ and $ match at line breaks, free-spacing |
| Regex flavors: .NET, Java, XRegExp, PCRE, Perl, Python, Ruby |
Discussion
Like the other INI recipes in this chapter, we’re working with
pretty straightforward regex ingredients here. The pattern starts with
‹^›, to
match the position at the start of a line (make sure the “^ and $ match
at line breaks” option is enabled). This is important because without
the assurance that matches start at the beginning of a line, you could
match part of a commented-out line.
Next, the regex uses a capturing group that contains the negated
character class ‹[^=;\r\n]› followed by the ‹+›
one-or-more quantifier to match the name of the parameter and remember
it as backreference 1. The negated class matches any character except
the following four: equals sign, semicolon, carriage return (‹\r›), and ...