8.12. Match INI Section Headers

Problem

You want to match all section headers in an INI file.

Solution

This one is easy. INI section headers appear at the beginning of a line, and are designated by placing a name within square brackets (e.g., [Section1]). Those rules are simple to translate into a regex:

^\[[^\]\r\n]+]
Regex options: ^ and $ match at line breaks
Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Discussion

There aren’t many parts to this regex, so it’s easy to break down:

  • The leading ^ matches the position at the beginning of a line, since the “^ and $ match at line breaks” option is enabled.

  • \[ matches a literal [ character. It’s escaped with a backslash to prevent [ from starting a character class.

  • [^\]\r\n] is a negated character class that matches any character except ], a carriage return (\r), or a line feed (\n). The immediately following + quantifier lets the class match one or more characters, which brings us to....

  • The trailing ] matches a literal ] character to end the section header. There’s no need to escape this character with a backslash because it does not occur within a character class.

If you only want to find a specific section header, that’s even easier. The following regex matches the header for a section called Section1:

^\[Section1]
Regex options: ^ and $ match at line breaks
Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby

In this case, the only difference from a plain-text search for “[Section1]” is that the match must ...

Get Regular Expressions Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.