import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(\\$)\n"
+ "# Regexp for textmate dynamic variables \n"
+ "#TM_(\n"
+ "# BUNDLE_SUPPORT|COMMENT_(?:END|MODE|START)|CURRENT_(?:LINE|WORD)|DIRECTORY|FILE(?:NAME|PATH)|\n"
+ "# LINE_(?:INDEX|NUMBER)|PROJECT_DIRECTORY|SCOPE|SELECTED_(?:FILE[S]?|TEXT)|SOFT_TABS|SUPPORT_PATH|TAB_SIZE\n"
+ "#)\n"
+ "(?:\n"
+ "# BASIC\n"
+ " # BASIC: Variable name, no brackets\n"
+ " (?:(TM_[A-Z]+(?:_[A-Z]+)*)|([\\d]))(?!\\{)\n"
+ "|\n"
+ "# BRACKETED\n"
+ " ([\\{])\n"
+ " # BRACKETED: Variable name\n"
+ " (?:(TM_[A-Z]+(?:_[A-Z]+)*)|([\\d]))\n"
+ " # BRACKETED: Post variable name expression\n"
+ " (?:\n"
+ " # Default keyword, single\n"
+ " ([:].+?(?=[\\}]))\n"
+ " |\n"
+ " # Default keyword, options\n"
+ " ([\\|].+?[\\|](?=[\\}]))\n"
+ " |\n"
+ " # Regular expression\n"
+ " (?:\n"
+ " ([\\/])\n"
+ " (.+?(?=\\/))\n"
+ " ([\\/])\n"
+ " (.+?(?=\\/))\n"
+ " ([\\/])\n"
+ " # Flags\n"
+ " # Not sure how to validate fully without back references?\n"
+ " ([imx]{3})\n"
+ " (?=\\})\n"
+ " )\n"
+ " |\n"
+ " (?:\n"
+ " ([\\/])\n"
+ " ([^\\/\\}]+?)\n"
+ " (\n"
+ " (?<![\\\\]{2})\n"
+ " [\\/]\n"
+ " )\n"
+ " ([^\\/\\}]+?)\n"
+ " (\n"
+ " (?<![\\\\]{2})\n"
+ " [\\/]\n"
+ " )\n"
+ " # Flags\n"
+ " # Not sure how to validate fully without back references?\n"
+ " ([imx]{3})\n"
+ " )\n"
+ " | \n"
+ " # Match to bracket\n"
+ " (.+?(?=[\\}]))?\n"
+ " )?\n"
+ " ([\\}])\n"
+ ")";
final String string = "~~ Number Variables ~~~~~~~~~\n"
+ "Basic\n"
+ "\"$0\"\n"
+ "Bracketed\n"
+ "\"${1} \n"
+ "Default Value\n"
+ "\"${2:default}\"\n"
+ "Default Values\n"
+ "\"${3|defaultA,defaultB|}\"\n"
+ "Regex Replace\n"
+ "\"${4/find/replace/gmi}\"\n\n"
+ "~~ Dynamic Variables ~~~~~~~~\n"
+ "Basic\n"
+ "\"$TM_SELECTION_START\"\n"
+ "Bracketed\n"
+ "\"${TM_SELECTION_END}\"\n"
+ "Default Value\n"
+ "\"${TM_SELECTED_FILE:default}\"\n"
+ "Default Values\n"
+ "\"${TM_SELECTED_TEXT|defaultA,defaultB|}\"\n"
+ "Regex Replace\n"
+ "\"${TM_SELECTED_FILES/find/replace/gmi}\"\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