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

/
/
x

Test String

Code Generator

Generated Code

#include <StringConstants.au3> ; to declare the Constants of StringRegExp #include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate Local $sRegex = "(?x)^ (?&address) $" & @CRLF & _ "(?(DEFINE)" & @CRLF & _ " (?<ALPHANUMERICE> " & @CRLF & _ " [A-Za-z0-9!\#$%&'*+\-\/=?^_`{|}~]" & @CRLF & _ " )" & @CRLF & _ " (?<CFWS> " & @CRLF & _ " (?: " & @CRLF & _ " (?: (?&FWS)? (?&comment) )++ " & @CRLF & _ " (?&FWS)?" & @CRLF & _ " ) " & @CRLF & _ " | (?&FWS) " & @CRLF & _ " )" & @CRLF & _ " (?<FWS> (?&WSPCRLF)++ )" & @CRLF & _ " (?<UTF8_extra_char> " & @CRLF & _ " (?=[\x{C2}-\x{DF}\x{E0}-\x{EF}\x{F0}-\x{F4}]) " & @CRLF & _ " (?: (?&UTF8_2) | (?&UTF8_3) | (?&UTF8_4) ) " & @CRLF & _ " )" & @CRLF & _ " (?<UTF8_tail> [\x{80}-\x{BF}] )" & @CRLF & _ " (?<UTF8_2> [\x{C2}-\x{DF}] (?&UTF8_tail) )" & @CRLF & _ " (?<UTF8_3> \x{E0} [\x{A0}-\x{BF}] (?&UTF8_tail)" & @CRLF & _ " | [\x{E1}-\x{EC}] (?&UTF8_tail){2} " & @CRLF & _ " | \x{ED} [\x{80}-\x{9F}] (?&UTF8_tail) " & @CRLF & _ " | [\x{EE}\x{EF}] (?&UTF8_tail){2}" & @CRLF & _ " )" & @CRLF & _ " (?<UTF8_4> \x{F0} [\x{90}-\x{BF}] (?&UTF8_tail){2}" & @CRLF & _ " | [\x{F1}-\x{F3}] (?&UTF8_tail){3}" & @CRLF & _ " | \x{F4} [\x{80}-\x{8F}] (?&UTF8_tail){2}" & @CRLF & _ " )" & @CRLF & _ " (?<VCHARWSP> [\x{21}-\x{7E}\ \t] )" & @CRLF & _ " (?<WSPCRLF> [\ \t\x{0D}\x{0A}] )" & @CRLF & _ " (?<address> (?&mailbox_list) | (?&group) )" & @CRLF & _ " (?<addr_spec> (?&local_part) @ (?&domain) )" & @CRLF & _ " (?<utf8_addr_spec> " & @CRLF & _ " (?&utf8_local_part) @ (?&utf8_domain) " & @CRLF & _ " )" & @CRLF & _ " (?<alt_address> (?&FWS) < (?&addr_spec) > )" & @CRLF & _ " (?<angle_addr> (?&CFWS)? < " & @CRLF & _ " (?: (?&addr_spec) " & @CRLF & _ " | (?&utf8_addr_spec) (?&alt_address)? " & @CRLF & _ " | (?&obs_route)? (?&addr_spec) " & @CRLF & _ " ) " & @CRLF & _ " > (?&CFWS)? " & @CRLF & _ " )" & @CRLF & _ " (?<atext> (?&ALPHANUMERICE) )" & @CRLF & _ " (?<utf8_atext> " & @CRLF & _ " (?&ALPHANUMERICE) " & @CRLF & _ " | (?&UTF8_extra_char) " & @CRLF & _ " )" & @CRLF & _ " (?<atom> (?&CFWS)? (?&atext)++ (?&CFWS)? )" & @CRLF & _ " (?<utf8_atom> " & @CRLF & _ " (?&CFWS)? (?&utf8_atext)++ (?&CFWS)? " & @CRLF & _ " )" & @CRLF & _ " (?<utf8_ccontent> " & @CRLF & _ " (?&ctext) " & @CRLF & _ " | (?&utf8_quoted_pair) " & @CRLF & _ " | (?&comment) " & @CRLF & _ " )" & @CRLF & _ " (?<comment> " & @CRLF & _ " \( " & @CRLF & _ " (?: " & @CRLF & _ " (?&FWS)? (?&utf8_ccontent) " & @CRLF & _ " )*+ " & @CRLF & _ " (?&FWS)? " & @CRLF & _ " \) " & @CRLF & _ " )" & @CRLF & _ " (?<ctext> " & @CRLF & _ " [!-'*-\[\]-~] " & @CRLF & _ " | (?&obs_ctext) " & @CRLF & _ " | (?&UTF8_extra_char) " & @CRLF & _ " )" & @CRLF & _ " (?<display_name> (?&phrase) )" & @CRLF & _ " (?<domain> " & @CRLF & _ " (?&dot_atom) " & @CRLF & _ " | (?&domain_literal) " & @CRLF & _ " | (?&obs_domain) " & @CRLF & _ " )" & @CRLF & _ " (?<utf8_domain> " & @CRLF & _ " (?&utf8_dot_atom) " & @CRLF & _ " | (?&domain_literal) " & @CRLF & _ " | (?&obs_domain) " & @CRLF & _ " )" & @CRLF & _ " (?<domain_literal> " & @CRLF & _ " (?&CFWS)? " & @CRLF & _ " \[ " & @CRLF & _ " (?: (?&FWS)? (?&dtext) )*+ " & @CRLF & _ " (?&FWS)? " & @CRLF & _ " \] " & @CRLF & _ " (?&CFWS)? " & @CRLF & _ " )" & @CRLF & _ " (?<dot_atom> " & @CRLF & _ " (?&CFWS)? (?&dot_atom_text) (?&CFWS)? " & @CRLF & _ " )" & @CRLF & _ " (?<utf8_dot_atom> " & @CRLF & _ " (?&CFWS)? (?&utf8_dot_atom_text) (?&CFWS)? " & @CRLF & _ " )" & @CRLF & _ " (?<dot_atom_text> " & @CRLF & _ " (?&atext)++ " & @CRLF & _ " (?: \. (?&atext)++ )*+ " & @CRLF & _ " )" & @CRLF & _ " (?<utf8_dot_atom_text> " & @CRLF & _ " (?&utf8_atext)++ " & @CRLF & _ " (?: \. (?&utf8_atext)++ )*+ " & @CRLF & _ " )" & @CRLF & _ " (?<dtext> [!-Z^-~] | (?&obs_dtext) )" & @CRLF & _ " (?<group> " & @CRLF & _ " (?&display_name) : (?&group_list)? ; (?&CFWS)? " & @CRLF & _ " )" & @CRLF & _ " (?<group_list> " & @CRLF & _ " (?&mailbox_list) " & @CRLF & _ " | (?&CFWS) " & @CRLF & _ " | (?&obs_group_list) " & @CRLF & _ " )" & @CRLF & _ " (?<local_part> " & @CRLF & _ " (?&dot_atom) " & @CRLF & _ " | (?&quoted_string) " & @CRLF & _ " | (?&obs_local_part) " & @CRLF & _ " )" & @CRLF & _ " (?<utf8_local_part> " & @CRLF & _ " (?&utf8_dot_atom) " & @CRLF & _ " | (?&utf8_quoted_string) " & @CRLF & _ " | (?&obs_local_part) " & @CRLF & _ " )" & @CRLF & _ " (?<mailbox> " & @CRLF & _ " (?&name_addr) " & @CRLF & _ " | (?&addr_spec) " & @CRLF & _ " | (?&utf8_addr_spec) " & @CRLF & _ " )" & @CRLF & _ " (?<mailbox_list> " & @CRLF & _ " (?: " & @CRLF & _ " (?&mailbox) (?: , (?&mailbox) )*+ " & @CRLF & _ " ) " & @CRLF & _ " | (?&obs_mbox_list) " & @CRLF & _ " ) " & @CRLF & _ " (?<name_addr> (?&display_name)? (?&angle_addr) )" & @CRLF & _ " (?<obs_NO_WS_CTL> " & @CRLF & _ " [\x{01}-\x{08}\x{0B}\x{0C}\x{0E}-\x{1F}\x{7F}] " & @CRLF & _ " )" & @CRLF & _ " (?<obs_ctext> (?&obs_NO_WS_CTL) )" & @CRLF & _ " (?<obs_domain> (?&atom) (?: \. (?&atom) )*+ )" & @CRLF & _ " (?<obs_domain_list> " & @CRLF & _ " (?: (?&CFWS) | , )*+ " & @CRLF & _ " @ (?&domain) " & @CRLF & _ " (?: , (?&CFWS)? (?: @ (?&domain) )? )*+ " & @CRLF & _ " )" & @CRLF & _ " (?<obs_dtext> " & @CRLF & _ " (?&obs_NO_WS_CTL) | (?&quoted_pair) " & @CRLF & _ " )" & @CRLF & _ " (?<obs_group_list> (?: (?&CFWS)? , )++ (?&CFWS)? )" & @CRLF & _ " (?<obs_local_part> (?&word) (?: \. (?&word) )*+ )" & @CRLF & _ " (?<obs_mbox_list> " & @CRLF & _ " (?: (?&CFWS)? , )*+ " & @CRLF & _ " (?&mailbox) " & @CRLF & _ " (?: , " & @CRLF & _ " (?: (?&mailbox) | (?&CFWS))? " & @CRLF & _ " )*+ " & @CRLF & _ " )" & @CRLF & _ " (?<obs_phrase> " & @CRLF & _ " (?&word) " & @CRLF & _ " (?: (?&word) | \. | (?&CFWS) )*+ " & @CRLF & _ " )" & @CRLF & _ " (?<obs_qp> " & @CRLF & _ " \\ " & @CRLF & _ " (?: " & @CRLF & _ " \x{00} " & @CRLF & _ " | (?&obs_NO_WS_CTL) " & @CRLF & _ " | [\x{0D}\x{0A}] " & @CRLF & _ " ) " & @CRLF & _ " )" & @CRLF & _ " (?<obs_qtext> (?&obs_NO_WS_CTL) )" & @CRLF & _ " (?<obs_route> (?&obs_domain_list) : )" & @CRLF & _ " (?<phrase> (?&word)++ | (?&obs_phrase) )" & @CRLF & _ " (?<qcontent> (?&utf8_qcontent) )" & @CRLF & _ " (?<utf8_qcontent> " & @CRLF & _ " (?&utf8_qtext) " & @CRLF & _ " | (?&utf8_quoted_pair) " & @CRLF & _ " )" & @CRLF & _ " (?<qtext> [!\#-\[\]-~] | (?&obs_qtext) )" & @CRLF & _ " (?<utf8_qtext> (?&qtext) | (?&UTF8_extra_char) )" & @CRLF & _ " (?<quoted_pair> " & @CRLF & _ " \\ (?&VCHARWSP) | (?&obs_qp) " & @CRLF & _ " )" & @CRLF & _ " (?<utf8_quoted_pair> " & @CRLF & _ " \\ (?&utf8_text) | (?&obs_qp) " & @CRLF & _ " )" & @CRLF & _ " (?<utf8_text> " & @CRLF & _ " [\x{01}-\x{09}\x{0D}\x{0A}\x{0E}-\x{7F}] " & @CRLF & _ " | (?&UTF8_extra_char) " & @CRLF & _ " )" & @CRLF & _ " (?<quoted_string> " & @CRLF & _ " (?&CFWS)? " " & @CRLF & _ " (?: (?&FWS)? (?&qcontent) )*+ " & @CRLF & _ " (?&FWS)? " (?&CFWS)? " & @CRLF & _ " )" & @CRLF & _ " (?<utf8_quoted_string> " & @CRLF & _ " (?&CFWS)? " " & @CRLF & _ " (?: (?&FWS)? (?&utf8_qcontent) )*+ " & @CRLF & _ " (?&FWS)? " (?&CFWS)? " & @CRLF & _ " )" & @CRLF & _ " (?<word> (?&utf8_atom) | (?&utf8_quoted_string) )" & @CRLF & _ ")" Local $sString = "John <a@b.c>, w@com, "wibb.[dhdhd]"@(comment)fred.com" Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYFULLMATCH) ; Present the entire match result _ArrayDisplay($aArray, "Result")

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 AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm