import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?(DEFINE)\n"
+ "# JSON does not need backtracking if it's valid\n"
+ "# so everything is atomic to prevent backtracking\n"
+ "# regex is built per https://tools.ietf.org/html/rfc8259\n"
+ "(?<json>(?>\\s*(?&object)\\s*|\\s*(?&array)\\s*))\n"
+ "(?<object>(?>\\{\\s*(?>(?&member)(?>\\s*,\\s*(?&member))*)?\\s*\\}))\n"
+ "(?<member>(?>(?&string)\\s*:\\s*(?&value)))\n"
+ "(?<array>(?>\\[\\s*(?>(?&value)(?>\\s*,\\s*(?&value))*)?\\s*\\]))\n"
+ "(?<value>(?>)false|null|true|(?&object)|(?&array)|(?&number)|(?&string))\n"
+ "(?<number>(?>-?(?>0|[1-9][0-9]*)(?>\\.[0-9]+)?(?>[eE][-+]?[0-9]+)?))\n"
+ "(?<string>(?>\"(?>\\\\(?>[\"\\\\\\/bfnrt]|u[a-fA-F0-9]{4})|[^\"\\\\\\0-\\x1F\\x7F]+)*\"))\n"
+ ")\n"
+ "\\A(?&json)\\z\n";
final String string = "[\n"
+ " \"JSON Test Pattern pass1\",\n"
+ " {\"object with 1 member\":[\"array with 1 element\"]},\n"
+ " {},\n"
+ " [],\n"
+ " -42,\n"
+ " true,\n"
+ " false,\n"
+ " null,\n"
+ " {\n"
+ " \"integer\": 1234567890,\n"
+ " \"real\": -9876.543210,\n"
+ " \"e\": 0.123456789e-12,\n"
+ " \"E\": 1.234567890E+34,\n"
+ " \"\": 23456789012E66,\n"
+ " \"zero\": 0,\n"
+ " \"one\": 1,\n"
+ " \"space\": \" \",\n"
+ " \"quote\": \"\\\"\",\n"
+ " \"backslash\": \"\\\\\",\n"
+ " \"controls\": \"\\b\\f\\n\\r\\t\",\n"
+ " \"slash\": \"/ & \\/\",\n"
+ " \"alpha\": \"abcdefghijklmnopqrstuvwyz\",\n"
+ " \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\",\n"
+ " \"digit\": \"0123456789\",\n"
+ " \"0123456789\": \"digit\",\n"
+ " \"special\": \"`1~!@#$%^&*()_+-={':[,]}|;.</>?\",\n"
+ " \"hex\": \"\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A\",\n"
+ " \"true\": true,\n"
+ " \"false\": false,\n"
+ " \"null\": null,\n"
+ " \"array\":[ ],\n"
+ " \"object\":{ },\n"
+ " \"address\": \"50 St. James Street\",\n"
+ " \"url\": \"http://www.JSON.org/\",\n"
+ " \"comment\": \"// /* <!-- --\",\n"
+ " \"# -- --> */\": \" \",\n"
+ " \" s p a c e d \" :[1,2 , 3\n\n"
+ ",\n\n"
+ "4 , 5 , 6 ,7 ],\"compact\":[1,2,3,4,5,6,7],\n"
+ " \"jsontext\": \"{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}\",\n"
+ " \"quotes\": \"" \\u0022 %22 0x22 034 "\",\n"
+ " \"\\/\\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?\"\n"
+ ": \"A key can be any string\"\n"
+ " },\n"
+ " 0.5 ,98.6\n"
+ ",\n"
+ "99.44\n"
+ ",\n\n"
+ "1066,\n"
+ "1e1,\n"
+ "0.1e1,\n"
+ "1e-1,\n"
+ "1e00,2e+00,2e-00\n"
+ ",\"rosebud\"]";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
final Matcher matcher = pattern.matcher(string);
if (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