import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "# SETTINGS\n"
+ " (?<ANCHORED>){1}\n"
+ " (?<NO_SIGN_DUP>){1}\n"
+ " (?<PYTHON_POW>){1}\n"
+ " (?<COMMENTS>){0}\n\n"
+ "(?(ANCHORED)^(?&s)*)\n"
+ "(?(DEFINE)\n"
+ " (?<s>(?(COMMENTS)(?:\\s+|\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*|\\#.*)|\\s+))\n"
+ " (?<sign>(?(NO_SIGN_DUP)(?<=(?<_>[\\s\\S]))(?!(?P=_)))[-+])\n"
+ " (?<base>\\d+(?:\\.\\d*)?|\\d*\\.\\d+)\n"
+ " (?<exp>(?:[eE][+-]?\\d+))\n"
+ " (?<num>(?&sign)?(?&base)(?&exp)?(?!\\w))\n"
+ " (?<bracketed>\\((?&s)*(?&expr)(?&s)*\\))\n"
+ " (?<atom>(?&num)|(?&bracketed))\n"
+ " (?<pow>(?&atom)(?:(?&s)*(?(PYTHON_POW)(?:\\^|\\*\\*)|\\^)(?&s)*(?&pow))*)\n"
+ " (?<mul>(?&pow)(?:(?&s)*[*\\/](?&s)*(?&mul))*)\n"
+ " (?<add>(?&mul)(?:(?&s)*[+-](?&s)*(?&add))*)\n"
+ " (?<expr>(?&add))\n"
+ ")\n"
+ "(?&expr)\n"
+ "(?(ANCHORED)(?&s)*$)";
final String string = "0\n"
+ "::\n"
+ "1\n"
+ "::\n"
+ "+1\n"
+ "::\n"
+ "-1\n"
+ "::\n"
+ "1.e-1\n"
+ "::\n"
+ "1e1\n"
+ "::\n"
+ ".1e+1\n"
+ "::\n"
+ "-6*((2**(2+4))/3)\n"
+ "::\n"
+ "0*0\n"
+ "::\n"
+ "0+0\n"
+ "::\n"
+ "0/0\n"
+ "::\n"
+ "0^0\n"
+ "::\n"
+ "0**0\n"
+ "::\n"
+ "0-0\n"
+ "::\n"
+ "5 - -2\n"
+ "::\n"
+ "5- -2\n"
+ "::\n"
+ "5+-2\n"
+ "::\n"
+ ".1\n"
+ "::\n"
+ "1.\n"
+ "::\n"
+ "1.1\n"
+ "::\n"
+ " -2\n"
+ "::\n"
+ "5 * (2 + 5 /* comment */ // )\n"
+ " - 1)\n\n"
+ "INVALID: // Separated by :: to prevent parsing multiple examples\n"
+ ".\n"
+ "::\n"
+ "1e\n"
+ "::\n"
+ "1e+\n"
+ "::\n"
+ "1e-\n"
+ "::\n"
+ "e2\n"
+ "::\n"
+ "+\n"
+ "::\n"
+ "-\n"
+ "::\n"
+ "5 --2\n\n";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS | 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