import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^((?(3)|\\)*)(?>\\((?2)*(()(?1))?(\\)|$)|0|\"[^\\n\"]*.?|(1|(2|(3|4(?1))(?1))(?1))(?1)))*\\)*$";
final String string = "Truthy:\n\n"
+ "0\n"
+ ")\n"
+ "(\n"
+ "\"\n"
+ "()\n"
+ "\"\"\n"
+ "10\n"
+ "400010\n"
+ "210010\n"
+ "(\"\")00\n"
+ "3\"\"\"\"\"\n"
+ "2(2(2(0)0)0)0\n"
+ "2\"010\"\"44)()4\"\n"
+ ")31(0)0(20102010\n"
+ "())2)1))0\"3())\"))\n"
+ "3(\"4321(\"301(0)21100\"4\")\"123\"00)40\"121\"31000\"\"01010\n\n"
+ "Falsy:\n\n"
+ "1\n"
+ "1(310\n"
+ "12(010\n"
+ "4\"00010\"\n"
+ "3120102100\n"
+ "20(2((0)(0)))\n"
+ "2(2(2(0)0)0)01)\n"
+ "4(0102)00)00000\n"
+ "2\"00\"(\"00\"2(\"\"))\n";
final Pattern pattern = Pattern.compile(regex, 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