import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(((ht|f)(tp)(s)?(:\\/\\/))?(([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))(:\\d{1,5})?((\\/)([\\w\\.~%-]+))*(\\/)?((\\?)(([\\w]+)(=[\\w\\.~%-]+)?((&)([\\w]+)(=[\\w\\.~%-]+)?)*)?)?((#)((([\\w]+(=[\\w\\,\\*\\.~%-]+)?)(&[\\w]+(=[\\w\\,\\*\\.~%-]+)?)*)|(:~:text=([\\w\\.~%-]+\\,)?([\\w\\.~%-]+)(\\,[\\w\\.~%-]+){0,2}))?)?)$";
final String string = "//Base case\n"
+ "17hieng.com\n"
+ "17hieng.com.my\n"
+ "www.17hieng.com.my\n"
+ "www.edu.17hieng.com.my\n"
+ "192.168.1.1\n\n"
+ "//With protocol\n"
+ "http://17hieng.com\n"
+ "https://192.168.1.1\n\n"
+ "//With Port\n"
+ "http://17hieng.com:8080\n"
+ "https://192.168.1.1:443\n\n"
+ "//With Path\n"
+ "www.edu.17hieng.com.my/edu\n"
+ "192.168.1.1/edu/\n"
+ "http://17hieng.com/edu/edu\n"
+ "https://192.168.1.1/\n\n\n"
+ "//With query\n"
+ "www.edu.17hieng.com.my?query=a&b=c\n"
+ "192.168.1.1/edu/?query=a&b=c@a.com\n"
+ "http://17hieng.com/edu/edu?query=a\n"
+ "https://192.168.1.1/?query=a&b&c=1\n\n\n"
+ "//With Fragment\n"
+ "www.edu.17hieng.com.my#about\n"
+ "192.168.1.1/edu?#line=10,20\n"
+ "192.168.1.1/edu/?query=a#t=40,8.0&xywh=160,120,320,240\n"
+ "http://17hieng.com/edu/edu?query=a#:~:text=prefix-,textStart,textEnd,-suffix\n"
+ "https://192.168.1.1/?query=a&b&c=1#\n\n"
+ "//domain only\n"
+ "17hieng.com\n"
+ "edu.17hieng.com\n"
+ "17hieng.com/\n"
+ "edu.17hieng.com/\n\n"
+ "//domain + https protocol\n"
+ "https://17hieng.com\n"
+ "https://edu.17hieng.com\n"
+ "https://17hieng.com/\n"
+ "https://edu.17hieng.com/\n\n"
+ "//domain + http protocol\n"
+ "http://17hieng.com\n"
+ "http://edu.17hieng.com\n"
+ "http://17hieng.com/\n"
+ "http://edu.17hieng.com/\n\n\n"
+ "//domain + file path\n"
+ "17hieng.com/cpp\n"
+ "edu.17hieng.com/cpp\n"
+ "17hieng.com/cpp/\n"
+ "edu.17hieng.com/cpp/\n\n"
+ "//domain + https protocol + file path\n"
+ "https://17hieng.com/cpp\n"
+ "https://edu.17hieng.com/cpp\n"
+ "https://17hieng.com/cpp/\n"
+ "https://edu.17hieng.com/cpp/\n\n"
+ "//domain + http protocol + file path\n"
+ "http://17hieng.com/cpp\n"
+ "http://edu.17hieng.com/cpp\n"
+ "http://17hieng.com/cpp/\n"
+ "http://edu.17hieng.com/cpp/\n\n"
+ "//domain + multiple folder file path\n"
+ "17hieng.com/cpp/intro\n"
+ "edu.17hieng.com/cpp/intro\n"
+ "17hieng.com/cpp/intro/\n"
+ "edu.17hieng.com/cpp/intro/\n\n"
+ "//domain + https protocol + multiple folder file path\n"
+ "https://17hieng.com/cpp/intro\n"
+ "https://edu.17hieng.com/cpp/intro\n"
+ "https://17hieng.com/cpp/intro/\n"
+ "https://edu.17hieng.com/cpp/intro/\n\n"
+ "//domain + http protocol + multiple folder file path\n"
+ "http://17hieng.com/cpp/intro\n"
+ "http://edu.17hieng.com/cpp/intro\n"
+ "http://17hieng.com/cpp/intro/\n"
+ "http://edu.17hieng.com/cpp/intro/\n\n"
+ "//domain + ?\n"
+ "17hieng.com?\n"
+ "edu.17hieng.com?\n"
+ "17hieng.com/?\n"
+ "edu.17hieng.com/?\n\n"
+ "//domain + https protocol + ?\n"
+ "https://17hieng.com?\n"
+ "https://edu.17hieng.com?\n"
+ "https://17hieng.com/?\n"
+ "https://edu.17hieng.com/?\n\n"
+ "//domain + http protocol + ?\n"
+ "http://17hieng.com?\n"
+ "http://edu.17hieng.com?\n"
+ "http://17hieng.com/?\n"
+ "http://edu.17hieng.com/?\n\n\n"
+ "//domain + file path + ?\n"
+ "17hieng.com/cpp?\n"
+ "edu.17hieng.com/cpp?\n"
+ "17hieng.com/cpp/?\n"
+ "edu.17hieng.com/cpp/?\n\n"
+ "//domain + https protocol + file path + ?\n"
+ "https://17hieng.com/cpp?\n"
+ "https://edu.17hieng.com/cpp?\n"
+ "https://17hieng.com/cpp/?\n"
+ "https://edu.17hieng.com/cpp/?\n\n"
+ "//domain + http protocol + file path + ?\n"
+ "http://17hieng.com/cpp?\n"
+ "http://edu.17hieng.com/cpp?\n"
+ "http://17hieng.com/cpp/?\n"
+ "http://edu.17hieng.com/cpp/?\n\n"
+ "//domain + multiple folder file path + ?\n"
+ "17hieng.com/cpp/intro?\n"
+ "edu.17hieng.com/cpp/intro?\n"
+ "17hieng.com/cpp/intro/?\n"
+ "edu.17hieng.com/cpp/intro/?\n\n"
+ "//domain + https protocol + multiple folder file path + ?\n"
+ "https://17hieng.com/cpp/intro?\n"
+ "https://edu.17hieng.com/cpp/intro?\n"
+ "https://17hieng.com/cpp/intro/?\n"
+ "https://edu.17hieng.com/cpp/intro/?\n\n"
+ "//domain + http protocol + multiple folder file path + ?\n"
+ "http://17hieng.com/cpp/intro?\n"
+ "http://edu.17hieng.com/cpp/intro?\n"
+ "http://17hieng.com/cpp/intro/?\n"
+ "http://edu.17hieng.com/cpp/intro/?\n\n"
+ "//domain + parameter\n"
+ "17hieng.com?name\n"
+ "edu.17hieng.com?name\n"
+ "17hieng.com/?name\n"
+ "edu.17hieng.com/?name\n\n"
+ "//domain + https protocol + parameter\n"
+ "https://17hieng.com?name\n"
+ "https://edu.17hieng.com?name\n"
+ "https://17hieng.com/?name\n"
+ "https://edu.17hieng.com/?name\n\n"
+ "//domain + http protocol + parameter\n"
+ "http://17hieng.com?name\n"
+ "http://edu.17hieng.com?name\n"
+ "http://17hieng.com/?name\n"
+ "http://edu.17hieng.com/?name\n\n\n"
+ "//domain + file path + parameter\n"
+ "17hieng.com/cpp?name\n"
+ "edu.17hieng.com/cpp?name\n"
+ "17hieng.com/cpp/?name\n"
+ "edu.17hieng.com/cpp/?name\n\n"
+ "//domain + https protocol + file path + parameter\n"
+ "https://17hieng.com/cpp?name\n"
+ "https://edu.17hieng.com/cpp?name\n"
+ "https://17hieng.com/cpp/?name\n"
+ "https://edu.17hieng.com/cpp/?name\n\n"
+ "//domain + http protocol + file path + parameter\n"
+ "http://17hieng.com/cpp?name\n"
+ "http://edu.17hieng.com/cpp?name\n"
+ "http://17hieng.com/cpp/?name\n"
+ "http://edu.17hieng.com/cpp/?name\n\n"
+ "//domain + multiple folder file path + parameter\n"
+ "17hieng.com/cpp/intro?name\n"
+ "edu.17hieng.com/cpp/intro?name\n"
+ "17hieng.com/cpp/intro/?name\n"
+ "edu.17hieng.com/cpp/intro/?name\n\n"
+ "//domain + https protocol + multiple folder file path + parameter\n"
+ "https://17hieng.com/cpp/intro?name\n"
+ "https://edu.17hieng.com/cpp/intro?name\n"
+ "https://17hieng.com/cpp/intro/?name\n"
+ "https://edu.17hieng.com/cpp/intro/?name\n\n"
+ "//domain + http protocol + multiple folder file path + parameter\n"
+ "http://17hieng.com/cpp/intro?name\n"
+ "http://edu.17hieng.com/cpp/intro?name\n"
+ "http://17hieng.com/cpp/intro/?name\n"
+ "http://edu.17hieng.com/cpp/intro/?name\n\n"
+ "//domain + parameter\n"
+ "17hieng.com?name=CheeHieng\n"
+ "edu.17hieng.com?name=Chee%20Hieng\n"
+ "17hieng.com/?name=Chee%20Hieng\n"
+ "edu.17hieng.com/?name=Chee%20Hieng\n\n"
+ "//domain + https protocol + parameter\n"
+ "https://17hieng.com?name=Chee%20Hieng\n"
+ "https://edu.17hieng.com?name=Chee%20Hieng\n"
+ "https://17hieng.com/?name=Chee%20Hieng\n"
+ "https://edu.17hieng.com/?name=Chee%20Hieng\n\n"
+ "//domain + http protocol + parameter\n"
+ "http://17hieng.com?name=Chee%20Hieng\n"
+ "http://edu.17hieng.com?name=Chee%20Hieng\n"
+ "http://17hieng.com/?name=Chee%20Hieng\n"
+ "http://edu.17hieng.com/?name=Chee%20Hieng\n\n\n"
+ "//domain + file path + parameter\n"
+ "17hieng.com/cpp?name=Chee%20Hieng\n"
+ "edu.17hieng.com/cpp?name=Chee%20Hieng\n"
+ "17hieng.com/cpp/?name=Chee%20Hieng\n"
+ "edu.17hieng.com/cpp/?name=Chee%20Hieng\n\n"
+ "//domain + https protocol + file path + parameter\n"
+ "https://17hieng.com/cpp?name=Chee%20Hieng\n"
+ "https://edu.17hieng.com/cpp?name=Chee%20Hieng\n"
+ "https://17hieng.com/cpp/?name=Chee%20Hieng\n"
+ "https://edu.17hieng.com/cpp/?name=Chee%20Hieng\n\n"
+ "//domain + http protocol + file path + parameter\n"
+ "http://17hieng.com/cpp?name=Chee%20Hieng\n"
+ "http://edu.17hieng.com/cpp?name=Chee%20Hieng\n"
+ "http://17hieng.com/cpp/?name=Chee%20Hieng\n"
+ "http://edu.17hieng.com/cpp/?name=Chee%20Hieng\n\n"
+ "//domain + multiple folder file path + parameter\n"
+ "17hieng.com/cpp/intro?name=Chee%20Hieng\n"
+ "edu.17hieng.com/cpp/intro?name=Chee%20Hieng\n"
+ "17hieng.com/cpp/intro/?name=Chee%20Hieng\n"
+ "edu.17hieng.com/cpp/intro/?name=Chee%20Hieng\n\n"
+ "//domain + https protocol + multiple folder file path + parameter\n"
+ "https://17hieng.com/cpp/intro?name=Chee%20Hieng\n"
+ "https://edu.17hieng.com/cpp/intro?name=Chee%20Hieng\n"
+ "https://17hieng.com/cpp/intro/?name=Chee%20Hieng\n"
+ "https://edu.17hieng.com/cpp/intro/?name=Chee%20Hieng\n\n"
+ "//domain + http protocol + multiple folder file path + parameter\n"
+ "http://17hieng.com/cpp/intro?name=Chee%20Hieng\n"
+ "http://edu.17hieng.com/cpp/intro?name=Chee%20Hieng\n"
+ "http://17hieng.com/cpp/intro/?name=Chee%20Hieng\n"
+ "http://edu.17hieng.com/cpp/intro/?name=Chee%20Hieng\n\n\n"
+ "//domain + mixed-parameter\n"
+ "17hieng.com?name=Chee%20Hieng&age&id=2200282\n"
+ "edu.17hieng.com?name=Chee%20Hieng&age&id=2200282\n"
+ "17hieng.com/?name=Chee%20Hieng&age&id=2200282\n"
+ "edu.17hieng.com/?name=Chee%20Hieng&age&id=2200282\n\n"
+ "//domain + https protocol + multi-parameter\n"
+ "https://17hieng.com?name=Chee%20Hieng&age&id=2200282\n"
+ "https://edu.17hieng.com?name=Chee%20Hieng&age&id=2200282\n"
+ "https://17hieng.com/?name=Chee%20Hieng&age&id=2200282\n"
+ "https://edu.17hieng.com/?name=Chee%20Hieng&age&id=2200282\n\n"
+ "//domain + http protocol + multi-parameter\n"
+ "http://17hieng.com?name=Chee%20Hieng&age&id=2200282\n"
+ "http://edu.17hieng.com?name=Chee%20Hieng&age&id=2200282\n"
+ "http://17hieng.com/?name=Chee%20Hieng&age&id=2200282\n"
+ "http://edu.17hieng.com/?name=Chee%20Hieng&age&id=2200282\n\n\n"
+ "//domain + file path + multi-parameter\n"
+ "17hieng.com/cpp?name=Chee%20Hieng&age&id=2200282\n"
+ "edu.17hieng.com/cpp?name=Chee%20Hieng&age&id=2200282\n"
+ "17hieng.com/cpp/?name=Chee%20Hieng&age&id=2200282\n"
+ "edu.17hieng.com/cpp/?name=Chee%20Hieng&age&id=2200282\n\n"
+ "//domain + https protocol + file path + multi-parameter\n"
+ "https://17hieng.com/cpp?name=Chee%20Hieng&age&id=2200282\n"
+ "https://edu.17hieng.com/cpp?name=Chee%20Hieng&age&id=2200282\n"
+ "https://17hieng.com/cpp/?name=Chee%20Hieng&age&id=2200282\n"
+ "https://edu.17hieng.com/cpp/?name=Chee%20Hieng&age&id=2200282\n\n"
+ "//domain + http protocol + file path + multi-parameter\n"
+ "http://17hieng.com/cpp?name=Chee%20Hieng&age&id=2200282\n"
+ "http://edu.17hieng.com/cpp?name=Chee%20Hieng&age&id=2200282\n"
+ "http://17hieng.com/cpp/?name=Chee%20Hieng&age&id=2200282\n"
+ "http://edu.17hieng.com/cpp/?name=Chee%20Hieng&age&id=2200282\n\n"
+ "//domain + multiple folder file path + multi-parameter\n"
+ "17hieng.com/cpp/intro?name=Chee%20Hieng&age&id=2200282\n"
+ "edu.17hieng.com/cpp/intro?name=Chee%20Hieng&age&id=2200282\n"
+ "17hieng.com/cpp/intro/?name=Chee%20Hieng&age&id=2200282\n"
+ "edu.17hieng.com/cpp/intro/?name=Chee%20Hieng&age&id=2200282\n\n"
+ "//domain + https protocol + multiple folder file path + multi-parameter\n"
+ "https://17hieng.com/cpp/intro?name=Chee%20Hieng&age&id=2200282\n"
+ "https://edu.17hieng.com/cpp/intro?name=Chee%20Hieng&age&id=2200282\n"
+ "https://17hieng.com/cpp/intro/?name=Chee%20Hieng&age&id=2200282\n"
+ "https://edu.17hieng.com/cpp/intro/?name=Chee%20Hieng&age&id=2200282\n\n"
+ "//domain + http protocol + multiple folder file path + parameter\n"
+ "http://17hieng.com/cpp/intro?name=Chee%20Hieng&age&id=2200282\n"
+ "http://edu.17hieng.com/cpp/intro?name=Chee%20Hieng&age&id=2200282\n"
+ "http://17hieng.com/cpp/intro/?name=Chee%20Hieng&age&id=2200282\n"
+ "http://edu.17hieng.com/cpp/intro/?name=Chee%20Hieng&age&id=2200%20282_\n\n\n\n\n"
+ "//Invalid\n"
+ "htp://17hieng.com\n"
+ "17Hieng.c\n"
+ "http:/17hieng.com\n"
+ "https//17h.my\n"
+ "code.17Hi@ng.com\n"
+ "17hieng.com/?=1\n"
+ "17hineg.com//\n"
+ "17Hieng.com/hello world\n"
+ "17Hieng.com<\n"
+ "17hieng.com/h=1\n"
+ "17Hieng.com=2\n"
+ "17hieng.com/?hi=&version\n"
+ "17hieng.com/?hi=1&version&&\n"
+ "17hieng.com/?hi=1&version&q%20\n";
final Pattern pattern = Pattern.compile(regex, 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