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

/
/
gm

Test String

Code Generator

Generated Code

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example { public static void main(String[] args) { final String regex = "(?P<Element><(?P<TagName>[:_A-z][-.0-9:_A-z\\xB7]*)(?:[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]*=[\\x09\\x0A\\x0D\\x20]*(?:\"(?:[^<&\"]|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*\"|'(?:[^<&']|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*'))*[\\x09\\x0A\\x0D\\x20]*(?:>(?:(?:[^<&\\]]|](?!]>))*(?:(?:(?P>Element)|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));|<!\\[CDATA\\[(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x5D]|](?!]>))*]]>|<\\?[:_A-z][-.0-9:_A-z\\xB7]*(?<!(?i:\\?xml))(?:[\\x09\\x0A\\x0D\\x20]+(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x3F]|\\?(?!>))*)?\\?>|<!--(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x2D]|-(?!-))*-->)(?:[^<&\\]]|](?!]>))*)*)<\\/(?P=TagName)[\\x09\\x0A\\x0D\\x20]*|\\/)>)|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));|<!\\[CDATA\\[(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x5D]|](?!]>))*]]>|<\\?[:_A-z][-.0-9:_A-z\\xB7]*(?<!(?i:\\?xml))(?:[\\x09\\x0A\\x0D\\x20]+(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x3F]|\\?(?!>))*)?\\?>|<!--(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x2D]|-(?!-))*-->|<!DOCTYPE[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*(?:[\\x09\\x0A\\x0D\\x20]+(?:SYSTEM[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*')[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')))?[\\x09\\x0A\\x0D\\x20]*(?:\\[(?:(?:<!ELEMENT[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:EMPTY|ANY|\\([\\x09\\x0A\\x0D\\x20]*#PCDATA(?:(?:[\\x09\\x0A\\x0D\\x20]*\\|[\\x09\\x0A\\x0D\\x20]*[:_A-z][-.0-9:_A-z\\xB7]*)*[\\x09\\x0A\\x0D\\x20]*\\)\\*|[\\x09\\x0A\\x0D\\x20]*\\))|(?:(?P<choice>\\([\\x09\\x0A\\x0D\\x20]*(?:[:_A-z][-.0-9:_A-z\\xB7]*|(?P>choice)|(?P>seq))[?*+]?(?:[\\x09\\x0A\\x0D\\x20]*\\|[\\x09\\x0A\\x0D\\x20]*(?:[:_A-z][-.0-9:_A-z\\xB7]*|(?P>choice)|(?P>seq))[?*+]?)+[\\x09\\x0A\\x0D\\x20]*\\))|(?P<seq>\\([\\x09\\x0A\\x0D\\x20]*(?:[:_A-z][-.0-9:_A-z\\xB7]*|(?P>choice)|(?P>seq))[?*+]?(?:[\\x09\\x0A\\x0D\\x20]*,[\\x09\\x0A\\x0D\\x20]*(?:[:_A-z][-.0-9:_A-z\\xB7]*|(?P>choice)|(?P>seq))[?*+]?)*[\\x09\\x0A\\x0D\\x20]*\\)))[?*+]?)[\\x09\\x0A\\x0D\\x20]*>|<!ATTLIST[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*(?:[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:CDATA|(?:ID(?:REFS?)?|ENTIT(?:Y|IES)|NMTOKENS?)|(?:NOTATION[\\x09\\x0A\\x0D\\x20]+\\([\\x09\\x0A\\x0D\\x20]*[:_A-z][-.0-9:_A-z\\xB7]*(?:[\\x09\\x0A\\x0D\\x20]*\\|[\\x09\\x0A\\x0D\\x20]*[:_A-z][-.0-9:_A-z\\xB7]*)*[\\x09\\x0A\\x0D\\x20]*\\)|\\([\\x09\\x0A\\x0D\\x20]*(?:[-.0-9:_A-z\\xB7])+(?:[\\x09\\x0A\\x0D\\x20]*\\|[\\x09\\x0A\\x0D\\x20]*(?:[-.0-9:_A-z\\xB7])+)*[\\x09\\x0A\\x0D\\x20]*\\)))[\\x09\\x0A\\x0D\\x20]+(?:#(?:REQUIRED|IMPLIED)|(?:#FIXED[\\x09\\x0A\\x0D\\x20]+)?(?:\"(?:[^<&\"]|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*\"|'(?:[^<&']|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*')))*[\\x09\\x0A\\x0D\\x20]*>|(?:<!ENTITY[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:(?:\"(?:[^%&\"]|%[:_A-z][-.0-9:_A-z\\xB7]*;|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*\"|'(?:[^%&']|%[:_A-z][-.0-9:_A-z\\xB7]*;|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*')|(?:SYSTEM[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*')[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*'))(?:[\\x09\\x0A\\x0D\\x20]+NDATA[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*)?)[\\x09\\x0A\\x0D\\x20]*>|<!ENTITY[\\x09\\x0A\\x0D\\x20]+%[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:(?:\"(?:[^%&\"]|%[:_A-z][-.0-9:_A-z\\xB7]*;|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*\"|'(?:[^%&']|%[:_A-z][-.0-9:_A-z\\xB7]*;|&(?:[:_A-z][-.0-9:_A-z\\xB7]*|#(?:[0-9]+|x[0-9a-fA-F]+));)*')|(?:SYSTEM[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*')[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')))[\\x09\\x0A\\x0D\\x20]*>)|<!NOTATION[\\x09\\x0A\\x0D\\x20]+[:_A-z][-.0-9:_A-z\\xB7]*[\\x09\\x0A\\x0D\\x20]+(?:(?:SYSTEM[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*')|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*')[\\x09\\x0A\\x0D\\x20]+(?:\"[^\"]*\"|'[^']*'))|PUBLIC[\\x09\\x0A\\x0D\\x20]+(?:\"[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x27-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*\"|'[\\x0A\\x0D\\x20\\x21\\x23-\\x25\\x28-\\x2F\\x3A\\x3B\\x3D\\x3F\\x40_0-9A-z]*'))[\\x09\\x0A\\x0D\\x20]*>|<\\?[:_A-z][-.0-9:_A-z\\xB7]*(?<!(?i:\\?xml))(?:[\\x09\\x0A\\x0D\\x20]+(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x3F]|\\?(?!>))*)?\\?>|<!--(?:[^\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x2D]|-(?!-))*-->)|(?:%[:_A-z][-.0-9:_A-z\\xB7]*;|[\\x09\\x0A\\x0D\\x20]+))*][\\x09\\x0A\\x0D\\x20]*)?>"; final String string = "<appointments>\n" + " <event date=\"03-05-02\" start-time=\"09:00\" end-time=\"10:00\">\n" + " <type>Meeting</type>\n" + " <title>Staff Meeting</title>\n" + " <description>Weekly staff meeting</description>\n" + " <location>Conference Room</location>\n" + " <reminder status=\"no\"/>\n" + " </event>\n\n" + " <event date=\"03-06-02\" start-time=\"14:00\" end-time=\"15:00\">\n" + " <type>Interview</type>\n" + " <title>Developer Interview</title>\n" + " <description>Interview new developer candidate.</description>\n" + " <location>Office</location>\n" + " <reminder status=\"yes\" interval=\"15-min\" method=\"ICQ\"/>\n" + " </event>\n\n" + " <event date=\"03-15-02\" start-time=\"13:45\" end-time=\"15:00\">\n" + " <type>Dentist</type>\n" + " <title>Root Canal</title>\n" + " <description>Root canal on lower left molar.</description>\n" + " <location>Dr. Scrivello's Office</location>\n" + " <reminder status=\"yes\" interval=\"1-day\" method=\"e-mail\"/>\n" + " </event>\n" + "</appointments>"; final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); 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