import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "e[yw][A-Za-z0-9-_]+\\.(?:e[yw][A-Za-z0-9-_]+)?\\.[A-Za-z0-9-_]{2,}(?:(?:\\.[A-Za-z0-9-_]{2,}){2})?";
final String string = "JWT pattern\n\n"
+ "- handles both JWS (3 segments) and JWE (5 segments)\n"
+ " - remove the ending `(?:(?:...` to handle JWS only\n"
+ "- segments 1+2 are expected tp start with `e[yw]`, an encoded start of JSON object `{\"` or `{\\n`\n"
+ " - remove/extend it to match used token structure\n"
+ " - or make it even more restrictive `(ey[IJ]|ewo)` to match encoded `{\"\\w` or `{\\n\"`\n"
+ "- payload (2nd segment) may be empty\n"
+ "- both header (1st segment) and payload are expected to start with `eyJ`, a base64 encoded start of JSON object `{\"`\n"
+ "- accepts only proper Base64url encoding (RFC 4648) without Base64 padding `=`\n"
+ "- test it at https://regex101.com/r/V99DS0\n\n"
+ "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwia2lkIjoicEw1NGdLalBHWElQVWw3eGlGN3B5MExJY3IxNkhPVlZnTXBtWjZqZmFUcUppb1h6M0FSM21EaWpTdXFxNnNvSTBoM1BaNzdMdDUzRjVUbVVPRW5KRGcifQ..LxFPkpn8Gu8vFuXDtOKA1A.DkMr_qOgv6zdyFiZGnz01wnFfLLmoMpRA-L3EbmgOGv21E-yU8ks7C_MSwA6E8KpXAB7XHeejJQWvs5ZrxDM2G8_t_BIJ6DUFXvLvLOzdo0hceeCCtujAgMPsjxW0RQFHkrA2VOlpuF7vVgJXPby19t0_QBWIaZnpfnAYzDJ98UpO1WbNxqGfdpbNG6RETpH.w1H3V7eGynuOi2qJUooceTCvoC4P5sT7bQRqbLZuyR0";
final Pattern pattern = Pattern.compile(regex);
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