import java.util.regex.*;
public class Main {
private static Pattern combineRe(Pattern p1, Pattern p2){
return Pattern.compile(combineRE(p1.pattern(), p2.pattern()));
}
int groups1 = 0, groups2=0;
StringBuilder newP = new StringBuilder("(?=");
newP.append(p1);
newP.append("$)(?=");
Pattern capturingGroup = Pattern.compile("(?<!\\\\)(\\\\\\\\)*\\((?!\\?)");
Matcher m = capturingGroup.matcher(p1);
while(m.find()) groups1 ++;
m = capturingGroup.matcher(p2);
while(m.find()) groups2 ++;
for(int i=1; i<=groups2; i++)
new2 = new2.replaceAll("(?<!\\\\)\\\\"+i, "\\\\" + (i+groups1));
newP.append(new2);
newP.append(").*");
return newP.toString();
}
public static void main
(String[] args
){ System.
out.
println("p1: " + p1
+ "\np2: " + p2
+ "\np: " + p
+ "\ns: " + s
); Matcher m = Pattern.compile(p).matcher(s);
int i = 0;
while (m.find()) {
System.
out.
println("find result " + (++i
) + ": " + m.
group()); }
}
}
aW1wb3J0IGphdmEudXRpbC5yZWdleC4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHJpdmF0ZSBzdGF0aWMgUGF0dGVybiBjb21iaW5lUmUoUGF0dGVybiBwMSwgUGF0dGVybiBwMil7CiAgICAgICAgcmV0dXJuIFBhdHRlcm4uY29tcGlsZShjb21iaW5lUkUocDEucGF0dGVybigpLCBwMi5wYXR0ZXJuKCkpKTsKICAgIH0KICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb21iaW5lUkUoU3RyaW5nIHAxLCBTdHJpbmcgcDIpewogICAgICAgIGludCBncm91cHMxID0gMCwgZ3JvdXBzMj0wOwogICAgICAgIFN0cmluZ0J1aWxkZXIgbmV3UCA9IG5ldyBTdHJpbmdCdWlsZGVyKCIoPz0iKTsKICAgICAgICBuZXdQLmFwcGVuZChwMSk7CiAgICAgICAgbmV3UC5hcHBlbmQoIiQpKD89Iik7CiAgICAgICAgCiAgICAgICAgUGF0dGVybiBjYXB0dXJpbmdHcm91cCA9IFBhdHRlcm4uY29tcGlsZSgiKD88IVxcXFwpKFxcXFxcXFxcKSpcXCgoPyFcXD8pIik7CiAgICAgICAgTWF0Y2hlciBtID0gY2FwdHVyaW5nR3JvdXAubWF0Y2hlcihwMSk7CiAgICAgICAgd2hpbGUobS5maW5kKCkpIGdyb3VwczEgKys7CiAgICAgICAgCiAgICAgICAgbSA9IGNhcHR1cmluZ0dyb3VwLm1hdGNoZXIocDIpOwogICAgICAgIAogICAgICAgIHdoaWxlKG0uZmluZCgpKSBncm91cHMyICsrOwogICAgICAgIFN0cmluZyBuZXcyID0gcDI7CiAgICAgICAgCiAgICAgICAgZm9yKGludCBpPTE7IGk8PWdyb3VwczI7IGkrKykKICAgICAgICAgICAgbmV3MiA9IG5ldzIucmVwbGFjZUFsbCgiKD88IVxcXFwpXFxcXCIraSwgIlxcXFwiICsgKGkrZ3JvdXBzMSkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgbmV3UC5hcHBlbmQobmV3Mik7CiAgICAgICAgbmV3UC5hcHBlbmQoIikuKiIpOwogICAgICAgIHJldHVybiBuZXdQLnRvU3RyaW5nKCk7CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKICAgICAgICBTdHJpbmcgcDEgPSAiYS4qIjsKICAgICAgICBTdHJpbmcgcDIgPSAiLipiIjsKICAgICAgICBTdHJpbmcgcCA9IGNvbWJpbmVSRShwMSwgcDIpOwogICAgICAgIFN0cmluZyBzID0gImNhY2JjIjsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInAxOiAiICsgcDEgKyAiXG5wMjogIiArIHAyICsgIlxucDogIiArIHAgKyAiXG5zOiAiICsgcyk7CiAgICAgICAgTWF0Y2hlciBtID0gUGF0dGVybi5jb21waWxlKHApLm1hdGNoZXIocyk7CiAgICAgICAgaW50IGkgPSAwOwogICAgICAgIHdoaWxlIChtLmZpbmQoKSkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmQgcmVzdWx0ICIgKyAoKytpKSArICI6ICIgKyBtLmdyb3VwKCkpOwogICAgICAgIH0KICAgIH0KfQ==