# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"e[yw][A-Za-z0-9-_]+\.(?:e[yw][A-Za-z0-9-_]+)?\.[A-Za-z0-9-_]{2,}(?:(?:\.[A-Za-z0-9-_]{2,}){2})?"
test_str = ("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")
matches = re.finditer(regex, test_str)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
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 Python, please visit: https://docs.python.org/3/library/re.html