using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(?!^xn--.*)(?!^.*(\.s3alias|--ol-s3)$)(?!^([0-9]+\.){3}[0-9]+$)(?!.*\.\.+)(^[a-z0-9][a-z0-9\-\.]{1,61}[a-z0-9]$)$";
string input = @"// ^(?!^xn--.*)(?!^.*(\.s3alias|--ol-s3)$)(?!^([0-9]+\.){3}[0-9]+$)(?!.*\.\.+)(^[a-z0-9][a-z0-9\-\.]{1,61}[a-z0-9]$)$
// 1. Disallow the xn-- .s3alias and --ol-s3 bans:
// (?!^xn--.*)(?!^.*(\.s3alias|--ol-s3)$)
// 2. Disallow IPv4 address (four segments of 1-3 numbers, separated by dots)
// (?!^([0-9]{1,3}\.){3}[0-9]{1,3}$)
// 4. Disallow consecutive dots
// (?!.*\.\.+)
// 3. must be 3-63 characters, starting and ending with alphanum, and only dots, dashes or lower alphanum
// (^[a-z0-9][a-z0-9\-\.]{1,61}[a-z0-9]$)
//
// Shorter version of this:
// ^(?!(xn--.*|.*(\.s3alias|--ol-s3)$|([0-9]+\.){3}[0-9]+$|.*\.\.+))(^[a-z0-9][a-z0-9\-\.]{1,61}[a-z0-9]$)
//
// Alternative:
// ^(?!^xn--.*)(?!^.*(\.s3alias|--ol-s3)$)(?!^([0-9]+\.){3}[0-9]+$)^[a-z0-9](\.[a-z0-9\-]+|[a-z0-9\-])*(\.|[a-z0-9\-])[a-z0-9]$
// 1. Disallow the xn-- .s3alias and --ol-s3 bans:
// (?!^xn--.*)(?!^.*(\.s3alias|--ol-s3)$)
// 2. Disallow IPv4 address (four segments of 1-3 numbers, separated by dots)
// (?!^([0-9]{1,3}\.){3}[0-9]{1,3}$)
// 3. Must start with alphanum
// ^[a-z0-9]
// 4. Allow only dots, dashes or lower alphanum, and disallow consecutive dots:
// (\.[a-z0-9\-]+|[a-z0-9\-])*
// 5. Must be three or more chars and end in an alphanum:
// (\.|[a-z0-9\-])[a-z0-9]$
//
// fine
a.b.c
asdf
a.b
abc
a-b
a--b
a---------------------b
000
010
1.2.3.a
foo-s3alias
foo--ol-s
xn-a
// too short
a
ab
// no int'l idn looking
xn--asdf
// can't end in these
foo.s3alias
foo--ol-s3
// must start, end in alphanum
abcd.
.abcd
.ab
abc-
acb.b-
// no consecutive dots
a....c
a..c
aaaa.a.a..b
// non-alphanumdash
élan
hello_world
FOO
foO
";
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