Regular Expressions 101

Save & Manage Regex

  • Current Version: 27
  • Save & Share
  • Community Library

Flavor

  • PCRE2 (PHP)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java
  • .NET 7.0 (C#)
  • Rust
  • PCRE (Legacy)
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests
Sponsors
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression
Processing...

Test String

Code Generator

Generated Code

import re regex = re.compile(r""" ^ # 40-character hex values are okay (0x[a-fA-F\d]{40}(*ACCEPT) # 'D' or 'X' followed by 33 specific characters are okay |D[^0-4\W_IOV-Z][^\W_IOl0]{32}(*ACCEPT) |X[^\W_IOl0]{33}(*ACCEPT) # 'bc1' followed by a range of specific characters are okay |bc1[^\W_IO]{25,39}(*ACCEPT) # Anything else is NOT okay, and all remaining processing should stop |(*COMMIT)[13][^\W_IOl0]{33} ) """, flags=re.MULTILINE | re.VERBOSE) test_str = ("0x7309f0134f3e51e8Cbe29dd86068e0f264f6c946\n" "0x7a250d5630b4cf539739df2c5dacb4c659f2488d\n" "0x6b1b45c925b29ea9d5bdde5490d7016edd288700\n" "0x61765fc9f4e67612d53f29b31484D9e95cc3bdb3\n" "0xD9cfbf343ac0eec25f5e2ead383fb4d57aaafbf9\n" "0x870205573906a3122f3647d34775FF77cb33f90e\n" "0x2dddae5c2c27ae6c1751cac72adacfe82a60f8a4\n" "0xab06b7806eac2329c5585ddd08dd7fe4e13dde5d\n" "bc1q3xe5n0j3qnsqc045e2vfx0246qzq5nyzag35xv\n" "bc1qjw2g03cdnwcxh8gwfcypd3hu3s3md3aqe8zvrl\n" "bc1qrupduyqlh4r5627vyz46fxker6wrf0sqt7he24\n" "bc1qyemk24czaa6a2nr89nrz775wefg32d\n" "17PZUMBg3gaPZvzC6jD4RMYT6J7D8ByzGa\n" "1FMTSe43cKHTpR6r5xqEuE76hnFBkToGjY\n" "35cydMA2G5i52XiM1wJ4EZf12fHdJ8hegQ\n" "3PdD6TiMAdF34JieBgMSGAEFTMsHvQLBLC\n" "DBs4WcRE7eysKwRxHNX88XZVCQ9M6QSUSz\n" "DTkv31pUBjJUVrD34mAWf8Cp9BgEkUtNPM\n" "DDTtqnuZ5kfRT5qh2c7sNtqrJmV3iXYdGG\n" "DGottmgfevJzhhfmvGdA2JpMjMJ1DsSKjJ\n" "D9a1Ah7mUNAJwNqHPER4DN9zNLoqcYFDZW\n" "D5zikmZbvK6ReZSFPDVGusqP3qKcJTjo4r\n" "DLCDJhnh6aGotar6b182jpzbNEyXb3C361\n" "D61T1GVeMZM8UHvXKyyD55Ur9efAF2mb5f\n" "XtbJQV8RWC39gMYsVdbRMCwMBDTAYPP99R\n" "Xi7CnDniGd726iY4pQr79PTqWtZuVDGu8g\n" "XxXhd59h44sRdvT3h5t2WXatox8Jhng9ob\n" "XnjYnC83zC9VAAkf1hg7yPEHJrd3vJwR2d\n" "XoCccXGPj16WZPzzD3UjsXRTPySZsAAXVD\n" "Xh77YHy84s2mrsAWZftY1oZNZUakPHyL35\n" "XuixmDKiB1fPzamnLoZw9Km3Lk7e2CyRT1\n" "XbJvzQQCWxLNkRUeFq4nS5FQhwT1LWVXJh\n" "bc1qyemk24czaa6a2nr89nrz775w\n\n" "1x870205573906a3122f3647d34775ff77cb33f90e\n" "Ox2dddae5c2c27ae6c1751cac72adacfe82a60f8a4\n" "0xab06bg806eac2329c5585ddd08dd7fe4e13dde5d\n" "0xD9cfbf343AC0eec25f5e_ead383fb4d57aaafbf9\n" "bclq3xe5n0j3qnsqc045e2vfx0246qzq5nyzag35xv\n" "bc1yemk24czaa6a2nr89nrz775wvptxg57yIe750ut\n" "0xab06b7806eac2329c5585ddd08dd7fe4\n" "25cydMA2G5i52XiM1wJ4EZf12fHdJ8hegQ\n" "3PdD6TIMAdF34JieBgMSGAEFTMsHvQLBLC\n" "lFMTSe43cKHTpR6r5xqEuE76hnFBkT0GjY\n" "12GFUMBg3gaPZOzC6lD4RMYT6J7D8ByzGa\n" "DI1T1GVeMZM8UHvXKyyD55Ur9efAF2mb5f\n" "D4JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ\n" "D41T1GVeMZM8UHvXKyyD55Ur9efAF2mb5f\n" "D1zikmZbvK6ReZSFPDVGusqP3qKcJTjo4r\n" "DOTtqnuZ5kfRs5qh2c7sNtqrJmV3iXYdff\n" "DLCDJhnh6aGotar6b182jpzbNEyXb3C36l\n" "XoGGGXGPj06WZPzzD3UjsXRTPySZsAAXVD\n" "Xh66YHy22s2mrsAWZftYIoZNZUakPXYdff\n" "XuixmDKiBlfPzamnLoZw9Km3Lk7e2CyRT1\n" "XBBBBBBCCCCCCRUeFq4nS5F0hwT1LLLLLh\n" "bc1qemk24czaa6a2nr89nrz775w\n") matches = regex.finditer(test_str) for match_num, match in enumerate(matches, start=1): print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}") for group_num, group in enumerate(match.groups(), start=1): print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")

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