import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "\\(\\?\\(DEFINE\\)(?<definition>(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\(\\?\\<(?<name>[\\w-[0-9]]\\w*?)\\>(?<content>(?#internals shallow)(?:(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\[(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])(?:\\\\\\[|\\\\\\])|[^\\[\\]])*(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\])|(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\(\\?(?:\\!|\\=|\\:|\\<\\!|\\<\\=)(?#internals deep)(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])(?:\\\\\\(|\\\\\\)|\\\\\\[|\\\\\\])|[^\\(\\)\\[\\]])+(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\))|(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])(?:\\\\\\(|\\\\\\)|\\\\\\[|\\\\\\])|[^\\(\\)\\[\\]]))+)(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\))*(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\)";
final String string = "(?(DEFINE)(?<internal_name_char_s>[^\\x85\\n\\r\\v\\t\\\\\\/\\:\\*\\\"\\?\\<\\>\\|])(?<external_filesc_name_char_s>[^\\x85\\n\\r\\v\\t\\\\\\/\\:\\*\\\"\\?\\<\\>\\|\\s])(?<external_folderesc_name_char_s>[^\\x85\\n\\r\\v\\t\\\\\\/\\:\\*\\\"\\?\\<\\>\\|\\s\\.])(?<folder_name_s>\\g'external_filesc_name_char_s'\\g'internal_name_char_s'{1,258}\\g'external_filesc_name_char_s'|\\g'external_folderesc_name_char_s'\\g'external_filesc_name_char_s'|\\g'external_filesc_name_char_s'\\g'external_folderesc_name_char_s'|\\g'external_folderesc_name_char_s')(?<extension_char_s>[a-z0-9])(?<extension_s>\\g'extension_char_s'{1,260})(?<file_name_s>(?:\\g'external_filesc_name_char_s'\\g'internal_name_char_s'{1,258}\\g'external_filesc_name_char_s'|\\g'external_filesc_name_char_s'{1,2})(?=\\.\\g'extension_s'\\Z))(?<ipv4_number_s>(?:[12]\\d\\d)|(?:\\d\\d)|(?:\\d))(?<ipv4_s>(?:\\g'ipv4_number_s'\\.){3}\\g'ipv4_number_s'(?:\\:\\d+)?)(?<named_drive_root_s>[a-z]\\:\\/)(?<file_protocol_root_s>file\\:\\/\\/\\/\\g'named_drive_root_s')(?<smb_root_s>\\/\\/)(?<hyper_text_root_s>https?\\:\\/\\/))(?#definition is complete)\\A(?!\\Z)(?<all_until_last_name>(?<root>(?<fixed_root>\\/|\\g'named_drive_root_s'|\\g'file_protocol_root_s'|(?<remote_root>\\g'smb_root_s'|\\g'hyper_text_root_s')(?:(?<ipv4>\\g'ipv4_s')(?:\\/(?!\\Z)|))?)|(?<relative_root>\\.{1,2}\\/(?:\\.\\.\\/)*))?(?<body>(?:\\g'folder_name_s'\\/)*?))(?<last_folder_or_file_name>(?<file_full_name>(?<file_short_name>\\g'file_name_s')\\.(?:(?<shortcut_extension>lnk)|(?<remote_extension>url)|(?<general_extension>\\g'extension_s'))(?!\\/))|(?:(?<folder_name>\\g'folder_name_s')\\/?))?\\Z";
final Pattern pattern = Pattern.compile(regex);
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