using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(?xms)
( # group 1
\b explore:
[^\S\r\n]* # optional horizontal whitespaces
[^\n{]* # possible content of the same line
# followed by two possibilities
(?: # the content stops at the end of the line with a ;
; [^\S\r\n]* $
| # or it contains curly brackets and spreads over eventually multiple lines
( # group 2
{
[^{}""]*+ # all that isn't curly brackets nor double quotes
(?:
"" [^\\""]*+ (?: \\. [^\\""]* )*+ "" # contents between quotes
[^{}""]*
|
(?2) # nested curly brackets, recursion in the group 2
[^{}""]*
)*+
}
)
)
)";
string input = @"explore: character_balance {}
explore: tower_ends {
label: ""Tower Results""
join: activity_type {
relationship: many_to_one
type: inner
sql_on: ${activity_type.activity_name}=${wba_fact_activity.activity_name} ;;
}
}
explore: seven11_core_session_start {}";
foreach (Match m in Regex.Matches(input, pattern))
{
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