import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(\\s*\\{(?:\\s*\"Modulus\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(3)(?(4)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\\s*\"Exponent\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(2)(?(4)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\\s*\"P\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(2)(?(3)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\\s*\"Q\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(2)(?(3)(?(4)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\\s*\"DP\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(2)(?(3)(?(4)(?(5)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\\s*\"DQ\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(2)(?(3)(?(4)(?(5)(?(6)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\\s*\"InverseQ\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)(?(9)|,)|,)|,)|,)|,)|,)|,)()|\\s*\"D\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)(?(8)|,)|,)|,)|,)|,)|,)|,)()){8}\\s*\\}\\s*\\2\\3\\4\\5\\6\\7\\8\\9)|(\\s*\\{(?:\\s*\"Modulus\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(12)|,)()|\\s*\"Exponent\"\\s*:\\s*\"[a-zA-Z\\d\\+\\/]+={0,2}\"\\s*(?(11)|,)()){2}\\s*\\}\\s*\\11\\12)";
final String string = "\n"
+ " {\n"
+ " \"Modulus\": \"AQAB\", \n"
+ "\"Exponent\": \"AQAB\",\n"
+ "\"P\": \"AQAB\", \n"
+ "\"Q\": \"AQAB\",\n\n"
+ "\"DP\": \"AQAB\",\n\n\n"
+ "\"DQ\": \"AQAB\",\n"
+ "\"InverseQ\": \"AQAB\",\n"
+ "\"D\": \"AQAB\" \n\n"
+ "} \n\n\n\n"
+ " {\n"
+ " \"Modulus\": \"AQAB\", \n"
+ "\"Exponent\": \"AQAB\" \n\n"
+ "} \n"
+ "(?(1)(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)|,)|,)|,)|,)|,)|,)|,)\n"
+ "2-3-4-5-6-7-8-9\n"
+ "(?(3)(?(4)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)\n"
+ "(?(2)(?(4)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)\n"
+ "(?(2)(?(3)(?(5)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)\n"
+ "(?(2)(?(3)(?(4)(?(6)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)\n"
+ "(?(2)(?(3)(?(4)(?(5)(?(7)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)\n"
+ "(?(2)(?(3)(?(4)(?(5)(?(6)(?(8)(?(9)|,)|,)|,)|,)|,)|,)|,)\n"
+ "(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)(?(9)|,)|,)|,)|,)|,)|,)|,)\n"
+ "(?(2)(?(3)(?(4)(?(5)(?(6)(?(7)(?(8)|,)|,)|,)|,)|,)|,)|,)\n\n"
+ "(?(DEFINE)(?P<b64>[a-zA-Z\\d\\+\\/]+={0,2})(?P<Q1>\\s*\")(?P<C1>(?(22)(?(23)(?(24)(?(25)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C2>(?(21)(?(23)(?(24)(?(25)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C3>(?(21)(?(22)(?(24)(?(25)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C4>(?(21)(?(22)(?(23)(?(25)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C5>(?(21)(?(22)(?(23)(?(24)(?(26)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C6>(?(21)(?(22)(?(23)(?(24)(?(25)(?(27)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C7>(?(21)(?(22)(?(23)(?(24)(?(25)(?(26)(?(28)|,)|,)|,)|,)|,)|,)|,))(?P<C8>(?(21)(?(22)(?(23)(?(24)(?(25)(?(26)(?(27)|,)|,)|,)|,)|,)|,)|,))(?P<Q2>\"\\s*:\\s*\"(?P>b64)\"\\s*)(?P<Modulus>(?P>Q1)Modulus(?P>Q2))(?P<Exponent>(?P>Q1)Exponent(?P>Q2))(?P<P>(?P>Q1)P(?P>Q2))(?P<Q>(?P>Q1)Q(?P>Q2))(?P<DP>(?P>Q1)DP(?P>Q2))(?P<DQ>(?P>Q1)DQ(?P>Q2))(?P<InverseQ>(?P>Q1)InverseQ(?P>Q2))(?P<D>(?P>Q1)D(?P>Q2)))(\\s*{\\s*)(?:(?P>Modulus)(?P>C1)()|(?P>Exponent)(?P>C2)()|(?P>P)(?P>C3)()|(?P>Q)(?P>C4)()|(?P>DP)(?P>C5)()|(?P>DQ)(?P>C6)()|(?P>InverseQ)(?P>C7)()|(?P>D)(?P>C8)()){8}\\s*}";
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