using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^@ heading2$[\s\S]*?^(?:field2: \""?((?<=\"")[^""\\]*(?:\\.[^""\\]*)*(?=\""$)|(?<!\"").*(?!\"")$)\""?$|)?$[\s\S]*?(?=@ [^\s]*?|\Z)";
string input = @"@ heading1
field1: ""single-line strings are quoted only sometimes.""
field2: ""strings that span
multiple lines
are always quoted.""
field3: this single-line string is unquoted.
@ heading2
field1: field names can be repeated among headings.
field2: ""Regex is harder when I add an
@ in a multi-line string, or if I add
backslash-escaped characters like \"" and \'.
What happens if I have an empty line in a string?
Also,
[this line]
isn't actually a section.""
field3: this field comes after field2
[sectionname]
field1: the same field name under a different section.
[anothersection]
field1: a second section under the same heading
field4: field number four
@ heading3
field1: value value value value value
field2: ""quoted string
quoted string
quoted string""
unique: unique field name";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx