using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(?(DEFINE)
(?<decimal>(?(int)([.][0-9]+)?|[.][0-9]+))
(?<percentage>
(100|
(?<int>([0-9]|[1-9][0-9]))? # Have integer be optional (0-100 only)
(?P>decimal) # Have decimal required when an integer is not included
)
(?<symbol>%)
)
(?<hue>
(?<int>36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])? # Have integer be optional
(?P>decimal) # Have decimal required when an integer is not included
(?<symbol>\s*deg\s*)?
)
(?<alpha>
(?(alpha),\s*(
1[.]0|
(?<int>0)? # Have integer be optional
(?P>decimal) # Have decimal required when integer is not incldue
)\s*)
)
(?<hsl>\s*(?P>hue)\s*,\s*(?P>percentage)\s*,\s*(?P>percentage)\s*)
)
hsl(?<alpha>a)?\((?P>hsl)(?P>alpha)\)";
string input = @"hsl(10, 50deg, 150%)
HSLA(50.35, .531, 10%)
HSLA(50.5deg, .531%, .9%, 1.0)";
RegexOptions options = RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase;
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