import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(?<scheme>[a-zA-Z][a-zA-Z0-9-+.]*)://(?:(?<username>(?:[\\w-]|%\\d\\d)+)(?::(?<passwd>(?:[\\w-]|%\\d\\d)*))?@)?(?<host>(?:[a-zA-Z][a-zA-Z0-9-]*\\.?)+|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?<port>:\\d+)?(?<path>(?:/(?:[\\w-.:]|%\\d\\d)+)+/?|/)?(?<query>\\?(?:(?:[\\w-]|%\\d\\d)+(?:=[\\w]+)?(?:&|$))*)?(?<fragment>#.*)?$";
final String string = "https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax\n"
+ "(↑ assuming URL, not URI; the only difference is that the host is mandatory)\n\n"
+ "https://regex101.com/\n"
+ "https://e./\n"
+ "https://org.\n"
+ "https://elearning.tgm.ac.at/pluginfile.php/297744/mod_resource/content/0/SEW5_UML_Einfuehrung.pdf\n"
+ "https://elearning.tgm.ac.at/mod/page/view.php?id%40_-ae=212356\n"
+ "https://elearning.tgm.ac.at/mod/assign/view.php?id=212239\n"
+ "https://elearning.tgm.ac.at/course/view.php?id=5454§ion=4\n"
+ "nonstandardscheme://is.still.valid\n"
+ "http://he.e/?\n"
+ "https://hy.a?a\n"
+ "http://h.?a&b&c=a\n"
+ "https://e.o.a.\n"
+ "http://0riedler:0%20tab-a_sco@riedler.a.wien/\n"
+ "http://emptypasswd:@riedler.wien/\n"
+ "http://a.e:33/\n"
+ "https://de.wikipedia.org/wiki/Wikipedia:Hauptseite\n"
+ "https://de.wikipedia.org/wiki/Preiselbeersauce#Zubereitung\n"
+ "https://toptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptop.top/\n"
+ "https://9.9.9.9/ipv4\n"
+ "https://2620:fe::fe/ipv6\n"
+ "ipv6 addresses are their own source of evil, not implementing those for now";
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