import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^ # begin\n"
+ "\\s*# some empty spaces\n"
+ "(?:\n"
+ " \\+? # + symbol\n"
+ " \\d{1,2} # country code\n"
+ " \\s*\n"
+ " (?(?=\\)) # if followed by parens\n"
+ " | # then dash not allowed\n"
+ " -? # else optional dash\n"
+ " )\n"
+ ")? #prefix like +380\n"
+ "\\s*\n"
+ "(?: \n"
+ " (?P<leftparen>\\()? # optional left paren\n"
+ " \\s*\n"
+ " 0\\d\\d \n"
+ " \\s*\n"
+ " (?(leftparen)\\)|) # right paren if and only if left paren\n"
+ ")? # operator code, starting with 0, optinally in parentheses\n"
+ "(?(?<=\\)) # if preceded by parens\n"
+ " \\s*| # then dash not allowed\n"
+ " \\s*-?\\s* # else optional dash\n"
+ ")\n"
+ "(?:\n"
+ " \\d | \n"
+ " (?<=\n"
+ " \\d\n"
+ " )\n"
+ " (?(sep)\n"
+ " (?P=sep)|\n"
+ " (?P<sep>[\\-\\/\\ ])\n"
+ " ) \n"
+ " (?=\n"
+ " \\d\n"
+ " )\n"
+ "){5,13}\n"
+ "\\s*# some empty spaces\n"
+ "$ # end\n"
+ "#\\d\\d\\d (?P<separator>-?) \\d\\d (?P=separator) \\d\\d $";
final String string = "SHOULD MATCH:\n"
+ "5344654\n"
+ " 5344654 \n"
+ "534-46-54\n"
+ "17189280121\n"
+ "+19173010176\n"
+ "(095)789-58-75\n"
+ "(095) 789-58-75\n"
+ "0957895875\n"
+ "917 229 2897\n"
+ "+38 (095) 5344654\n"
+ "53-475-34\n"
+ "555-1-333\n"
+ "1-333-484\n"
+ "888-333-4\n"
+ "(094)999-22-44\n"
+ "38-095-432-43-34\n"
+ "095-432-43-34\n"
+ "123456\n"
+ "53465\n\n"
+ "SHOULD NOT MATCH:\n"
+ "1\n"
+ "-1234\n"
+ "38-(095)-432-43-34\n"
+ "534-46/54\n"
+ "(094)999/22-44\n"
+ "1234--567\n"
+ "(345)5345654\n"
+ "(0955344654\n"
+ "095)5345654\n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.COMMENTS);
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