using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^#start of line
(?![^\n!]*!{2,})
(?=[^_\n]*_[^_]*) #if _ exists, then:
([^_:]+) #mandatory group 1
((?=:[^:\n]):[^:_(\n]+|) #optional group 2
(_(?!_)) #group 3 mandatory
([^_\-(\n]+) # group 4 mandatory
\( #mandatory (
([^()\n]+) # group 5 mandatory
\) #mandatory )
((?=!)!|) # group 6 optional
((?=:[^!:@\n]):[^!:@\n]+|) # group 7 optional
((?=::[^!:@\n])::[^!:@\n]+|) #group 8 optional
((?=@[^!:@\n])@[^!:@\n]+|) #group 9 optional
$ #end of line";
string input = @"# OK - Matches all components if all are provided
contextClassName:pc_ruleName(param_One paramTwo)!:pc::pe@media
# OK - Return group 2 blank when no : exists before _ which is group 3
contextClassName_ruleName(param_One paramTwo)!:pc::pe@media
# OK - When ! is not provided return group 6 blank
contextClassName_ruleName(param_One paramTwo):pc::pe@media
# NOTOK - More than one consecutive !
contextClassName_ruleName(param_One paramTwo)!!:pc::pe@media
# NOTOK - 3 More than two : at instruction tail
contextClassName_ruleName(param_One paramTwo):::pe@media
# OK - 2 At instruction tail :: is resolved to group 8
contextClassName_ruleName(param_One paramTwo)::pe@media
# OK - 1 At instruction tail : is resolved to group 7
contextClassName_ruleName(param_One paramTwo):pe@media
# OK - At instruction start : followed by chars
contextClassName:pc_ruleName(param_One paramTwo):pe@media
# NOTOK - At instruction start : not followed by chars
contextClassName:_ruleName(param_One paramTwo):pe@media
# NOTOK - At instruction start :: followed by chars
contextClassName::pc_ruleName(param_One paramTwo):pe@media
# OK - Whole instruction tail is optional
contextClassName:pc_ruleName(param_One paramTwo)
# OK - Parameter value can contain anything
contextClassName:pc_ruleName(param_One param#$^Two)";
RegexOptions options = RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace;
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