import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(?!\\.)(?:\\.?[\\w\\+]++)++@(?!\\.)(?:\\.?(?:xn--)?(?!-|.*--)[a-zA-Z0-9\\-]++(?<!-)){2,}$";
final String string = "# Valid\n"
+ "victor.schroeder@35up.com\n"
+ "victor.schroeder+foo@35up.com\n"
+ "v_s@35up.com\n"
+ "1233@35up.com\n"
+ "victor.schroeder@xn--bcher-kva.de\n\n"
+ "# Invalid\n"
+ "victor.schroeder@35up\n"
+ "victor.schroeder@.35up.com\n"
+ "victor.schroeder@35up.com.\n"
+ "victor.schroeder@-35up.com\n"
+ "victor.schroeder@35up-.com\n"
+ "victor.schroeder@35up.com-\n"
+ "victor.schroeder@35up.-com\n"
+ "victor.schroeder.@35up.com\n"
+ "victor.schroeder@35up..com\n"
+ ".victor.schroeder@35up.com\n"
+ "victor.schroeder@35--up.com\n"
+ "victor.schroeder@xn---bcher-kva.de\n"
+ "victor.schroeder@35_up.com\n\n"
+ "# Blacklisted chars\n"
+ "victor;schroeder@35up.com\n"
+ "victor,schroeder@35up.com\n"
+ "victor@schroeder@35up.com\n"
+ "victor[schroeder@35up.com\n"
+ "victor]schroeder@35up.com\n"
+ "victor(schroeder@35up.com\n"
+ "victor)schroeder@35up.com\n"
+ "victor<schroeder@35up.com\n"
+ "victor>schroeder@35up.com\n"
+ "victor:schroeder@35up.com\n"
+ "victor schroeder@35up.com\n"
+ "victor\\schroeder@35up.com\n"
+ "victor\"schroeder@35up.com";
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