Regular Expressions 101

Save & Share

Flavor

  • PCRE2 (PHP >=7.3)
  • PCRE (PHP <7.3)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java 8
  • .NET 7.0 (C#)
  • Rust
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests

Tools

Sponsors
There are currently no sponsors. Become a sponsor today!
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
No Match

/
/
gm

Test String

Code Generator

Generated Code

# coding=utf8 # the above tag defines encoding for this document and is for Python 2.x compatibility import re regex = r"\b(5[1-5][0-9]{2}[ -])([0-9]{4}[ -]){2}[0-9]{4}\b|\b(5[1-5][0-9]{2})([0-9]{4}){3}\b|\b222[1-9][ -]([0-9]{4}[ -]){2}[0-9]{4}\b|\b222[1-9]([0-9]{4}){3}\b|\b22[3-9][0-9][ -]([0-9]{4}[ -]){2}[0-9]{4}\b|\b22[3-9][0-9]([0-9]{4}){3}\b|\b2[3-6][0-9]{2}[ -]([0-9]{4}[ -]){2}[0-9]{4}\b|\b2[3-6][0-9]{2}([0-9]{4}){3}\b|\b27[01][0-9][ -]([0-9]{4}[ -]){2}[0-9]{4}\b|\b27[01][0-9]([0-9]{4}){3}\b|\b2720[ -]([0-9]{4}[ -]){2}[0-9]{4}\b|\b2720([0-9]{4}){3}\b" test_str = ("MasterCard:\n" "Requirements: MasterCard numbers either start with the numbers 51 through 55 or with the numbers 2221 through 2720. All have 16 digits.\n\n" "Pattern Parts:\n" "Starts with numbers 51 through 55:\n" "1) \\b(5[1-5][0-9]{2}[ -])([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b(5[1-5][0-9]{2})([0-9]{4}){3}\\b\n\n" "Starts with numbers 2221 through 2720:\n" "2) \\b222[1-9][ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b222[1-9]([0-9]{4}){3}\\b\n" "3) \\b22[3-9][0-9][ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b22[3-9][0-9]([0-9]{4}){3}\\b\n" "4) \\b2[3-6][0-9]{2}[ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b2[3-6][0-9]{2}([0-9]{4}){3}\\b\n" "5) \\b27[01][0-9][ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b27[01][0-9]([0-9]{4}){3}\\b\n" "6) \\b2720[ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b2720([0-9]{4}){3}\\b\n\n" "Combining 1-6 to form one pattern:\n" "\\b(5[1-5][0-9]{2}[ -])([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b(5[1-5][0-9]{2})([0-9]{4}){3}\\b|\\b222[1-9][ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b222[1-9]([0-9]{4}){3}\\b|\\b22[3-9][0-9][ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b22[3-9][0-9]([0-9]{4}){3}\\b|\\b2[3-6][0-9]{2}[ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b2[3-6][0-9]{2}([0-9]{4}){3}\\b|\\b27[01][0-9][ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b27[01][0-9]([0-9]{4}){3}\\b|\\b2720[ -]([0-9]{4}[ -]){2}[0-9]{4}\\b|\\b2720([0-9]{4}){3}\\b\n\n\n" "Test Cases:\n" "Should fire:\n" "16 length, no space, start with 51-55 5123123412341234\n" "16 length, dashes, start with 51-55 5123-1234-1234-1234\n" "16 length, spaces, start with 51-55 5123 1234 1234 1234\n\n" "16 length, no space, start with 2221-2720 2221123412341234\n" "16 length, dashes, start with 2221-2720 2221-1234-1234-1234\n" "16 length, spaces, start with 2221-2720 2221 1234 1234 1234\n\n" "16 length, no space, start with 2221-2720 2241123412341234\n" "16 length, dashes, start with 2221-2720 2241-1234-1234-1234\n" "16 length, spaces, start with 2221-2720 2241 1234 1234 1234\n\n" "16 length, no space, start with 2221-2720 2321123412341234\n" "16 length, dashes, start with 2221-2720 2321-1234-1234-1234\n" "16 length, spaces, start with 2221-2720 2321 1234 1234 1234\n\n" "16 length, no space, start with 2221-2720 2705123412341234\n" "16 length, dashes, start with 2221-2720 2705-1234-1234-1234\n" "16 length, spaces, start with 2221-2720 2705 1234 1234 1234\n\n" "16 length, no space, start with 2221-2720 2720123412341234\n" "16 length, dashes, start with 2221-2720 2720-1234-1234-1234\n" "16 length, spaces, start with 2221-2720 2720 1234 1234 1234\n\n" "Should not fire:\n" "16 length, no space, not start with 51-55 5623123412341234\n" "16 length, dashes, not start with 51-55 5623-1234-1234-1234\n" "16 length, spaces, not start with 51-55 5623 1234 1234 1234\n\n" "16 length, no space, not start with 2221-2720 2220123412341234\n" "16 length, dashes, not start with 2221-2720 2220-1234-1234-1234\n" "16 length, spaces, not start with 2221-2720 2220 1234 1234 1234\n\n" "Non 16 length, matches 51 pattern start 5123-1234-1234-123\n" "Non 16 length, matches 2221 pattern start 2221-1234-1234-123\n\n" "Malformed, matches 51 pattern start 51-2312-34-1234-1234 \n\n\n\n\n\n") matches = re.finditer(regex, test_str, re.MULTILINE) 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