Neat, but probably inefficient example of conditional
Started messing around with conditional matching today and was rather proud of myself when I got this stuff to work.
The pattern matches compound statements in the body of a simple if statement taking into account that there may or may not be braces.
I'll bet a MILLION bucks that there's a *much* more efficient way to do this, but that's for another lesson ;-)
using System ;
using System.Text.RegularExpressions ;
namespace RegexSnippets.Tests
{
public class Foo
{
public static void Main()
{
/*
TRY WITH THIS AS WELL...
string source = @"if( 1 == 1 ){
MessageBox.Show( ""this is in the compound statement block."" ) ;
}
MessageBox.Show( ""this is not."" ) ;
aaa ;" ;
*/
string source = @"if( 1 == 1 ){
MessageBox.Show( ""this is in the compound statement block."" ) ;
MessageBox.Show( ""so is this."" ) ;
}
aaa ;" ;
string pattern = @"(?'statementType'\w+)\s*?
\((?'condition'.*?)\)(?:\s*)?
(?'openingCompound'\{)?(?:\s*)?
(?(openingCompound)
(?'compoundStatements'.*?
(?'closingCompound'})
)
|
(?'compoundStatements'.*?
(?'closingCompound';)
)
)
(?'theRest'.*)" ;
Regex re = new Regex(
pattern,
RegexOptions.IgnoreCase
|RegexOptions.Multiline
|RegexOptions.IgnorePatternWhitespace
|RegexOptions.Singleline
) ;
Match m = re.Match( source ) ;
if( m.Groups["condition"].Success ) {
Console.WriteLine("Statement Type: {0}", m.Groups["statementType"]) ;
Console.WriteLine("Condition: {0}", m.Groups["condition"]) ;
Console.WriteLine("Opening Compound: {0}", m.Groups["openingCompound"].Success) ;
Console.WriteLine("Compound Statements: {0}", m.Groups["compoundStatements"].Value.Trim()) ;
Console.WriteLine("Closing Compound Char: {0}", m.Groups["closingCompound"].Value.Trim()) ;
Console.WriteLine("The rest: {0}", m.Groups["theRest"].Value.Trim()) ;
}
else
{
Console.WriteLine("Parser Error!") ;
}
Console.ReadLine() ;
}
}
}