import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(?:(?:[_a-z0-9](?:[_a-z0-9-]{0,61}[a-z0-9])?|[0-9]{1,3}?/[0-9]{2})\\.)+(?:[a-z](?:[a-z0-9-]{0,61}[a-z0-9])?)?$";
final String string = "This regexp can be used to validate domain names in Golang.\n"
+ "While it cannot enforce the 253 character limit (with optional trailing period not included)\n"
+ "that can be easily done with a `len(domain) <= 253` check.\n\n"
+ "This can be used as-is in other languages, even with RE2 regex engine.\n"
+ "Non-capturing groups are used.\n"
+ "Example validated domains (some may be invalid per TLD rules):\n\n"
+ "example.com\n"
+ "_25._tcp.SRV.example\n"
+ "a.punycoded-idna.xn--zckzah\n"
+ "under_score.example\n"
+ "0/27.0.0.1.in-addr.arpa\n"
+ "128/32.255.255.123.in-addr.arpa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.\n\n"
+ "Example invalid domains:\n\n"
+ "192.0.2.1\n"
+ "has spaces.com\n"
+ "easy,typo.example\n"
+ "23/1.invalid\n"
+ "domain\\.escapes.invalid\n"
+ "trailing_.underscore.invalid\n"
+ "-leading.hyphens.invalid\n"
+ "trailing-.hyphens.invalid\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n"
+ "TLDs have more validation, the following will not validate:\n\n"
+ "a\n"
+ "example\n"
+ "digit.1example\n"
+ "underscore._example_com\n\n"
+ "but with a trailing period, the same rules as non-TLD are applied:\n\n"
+ "a.\n"
+ "example.\n"
+ "digit.1example.\n"
+ "underscore._example_com.\n";
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
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 Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html