import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "\\$\n"
+ "(?=[^$]{3,100}\\$)\n"
+ "(?<PH>[A-Za-z0-9:_-]{1,20})\n"
+ "(?:\n"
+ " (?<C1>\\/)\n"
+ " (?<RX>(?:[^\\\\\\/\\r\\n]|\\\\\\/?)*)\n"
+ " \\/\n"
+ " (?:\n"
+ " (?<R>(?:[^\\\\\\/\\r\\n$]|\\\\[\\/$]?)*)\n"
+ " \\/\n"
+ " |\n"
+ " (?<G>\\d*)\n"
+ " )\n"
+ " |\n"
+ " (?:\n"
+ " (?<C2>\\()\n"
+ " (?<F>(?:[^\\t\\r\\n\\f()]|\\\\[()]?)*)\n"
+ " \\)\n"
+ " )?\n"
+ ")\n"
+ "\\$";
final String string = " $EX1$ -> EX1\n"
+ " $EX2(a$b$c)$ -> EX2, (, a$b$c\n"
+ " $EX3(abc\\x/)$ -> EX3, (, abc\\x/\n"
+ " $EX4(\\@\\,/&/)$ -> EX4, (, \\@\\,/&/\n"
+ " $EX5/X(Z)Y/$ -> EX5, /, X(Z)Y\n"
+ " $EX6/X(ABC)/1$ -> EX6, /, X(ABC), 1\n"
+ " $EX7/X\\\\Z\\/Y/$ -> EX7, /, X\\\\Z\\/Y\n"
+ " $EX8/(A)/(B)/$ -> EX8, /, (A), (B)\n"
+ " $EX9/(\\\\$A$)\\//(\\\\$B$\\/)/$ -> EX9, /, (\\\\$A$)\\/, (\\\\$B$\\/)\n\n\n"
+ "Lorem Ip$um $EX1$i$ simply dummy $EX1$$EX2(abc)$ te$t of the printing and \n"
+ "type$EX2(abc)$etting indu$try. $EX3(abc\\x/)$ Lorem $EX4(\\@\\,/&/)$Ipsum has been the \n"
+ "industry'$EX5/X(Z)Y/$ standard du$EX6/X(ABC)/1$mmy text $EX7/X\\\\Z\\/Y/$ ever $$$ince the \n"
+ "1500$EX8/(A)/(B)/$, when an $ unknown $EX9/(\\\\$A$)\\//(\\\\$B$\\/)/$ printer took a galley of type ";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE | 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