import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(\n"
+ " ( # define some frequently used capture groups\n"
+ " (?!x)x # always false (\"match only if there is no 'x' ahead and there is 'x' ahead\")\n"
+ " (?<name>[^_]+) # group \"name\", name of the program/library\n"
+ " (?<os>windows|linux|osx|android) # group \"os\", operating systems\n"
+ " (?<arch>x86-64|x86|arm64|armhf|armel|multiarch) # group\"arch\", architectures\n"
+ " (?<buildtype>release|debug) # group\"buildtype\", build types\n"
+ " (?<linking>shared|static|mixed) # group \"linking\", library linking/build types\n"
+ " )\n"
+ " |\n"
+ " ( # regular executable builds\n"
+ " (?!lib)\\g<name>_build_\\g<os>_\\g<arch>_\\g<buildtype>\n"
+ " )\n"
+ " |\n"
+ " ( # library builds\n"
+ " lib\\g<name>_build_\\g<os>_\\g<arch>_\\g<linking>_\\g<buildtype>\n"
+ " )\n"
+ " |\n"
+ " ( # syncing source code of a project from git or something else\n"
+ " \\g<name>_src\n"
+ " )\n"
+ " |\n"
+ " ( # static code analizer\n"
+ " \\g<name>_analyze_(cppcheck|scan-build)\n"
+ " )\n"
+ " |\n"
+ " ( # package builds\n"
+ " \\g<name>_pkg_\\g<os>_\n"
+ " (\n"
+ " ((?<=linux_) # if there is \"linux_\" before here\n"
+ " # then match\n"
+ " (deb|rpm)_\n"
+ " (shared|static)_\n"
+ " (\n"
+ " ((?<=deb_shared_) # if there is \"deb_shared_\" before here\n"
+ " # then match\n"
+ " (jessie|stretch|buster|sid|xenial|yakkety|zesty|artful)_\n"
+ " )\n"
+ " |\n"
+ " ((?<!deb_shared_) # if there is no \"deb_shared_\", don't match anything\n"
+ " )\n"
+ " )\n"
+ " )\n"
+ " |\n"
+ " ((?<!linux_) # if there is no \"linux_\", don't match anything\n"
+ " )\n"
+ " )\n"
+ " \\g<arch>_(stable|nightly)_\\g<buildtype>\n"
+ " )\n"
+ ")$";
final String string = "qtox_pkg_linux_deb_shared_jessie_x86_stable_release";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
final Matcher matcher = pattern.matcher(string);
if (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