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

r"
"
g

Test String

Code Generator

Generated Code

re = /<tr class='(.)'><td class='TR(.)'><a href='http:\/\/www\.openstreetmap\.org\/\?mlon=([-\d\.]+)&mlat=([-\d\.]+)&zoom=\d+' target='_blank'><img src='img\/flags\/(\w+)\.gif' class='flag' width='\d+px' title='(.+)' alt='\w+' border='0'><\/a>&nbsp;<a href='router_detail\.php\?FP=([a-zA-Z0-9]+)' target='_blank'>([^\<]+)<\/a><\/td><td class='TDb'><table cellspacing='0' cellpadding='0' class='bwb'><tr title='([^']+)'><td class='bwr.?'><img src='img\/bar\/\d+.png' width='\d+px' height='15px' alt='\d+'><\/td><td>&nbsp;<small>&nbsp;\d+<\/small><\/td><\/tr><\/table><\/td><td class='TDc.?'>([^<]+)<\/td><td class='TDS'><table class='iT'><tr><td class='iT'>([^\[]+)\[<a class='who' href='\/cgi\-bin\/whois.pl\?ip=[\d\.]+' target='_blank'>([\d\.]+)<\/a>\]<\/td>(<td><img src='img\/status\/Fast.png' title='Fast Server' alt='Fast Server'><\/td>)?(<td><img src='img\/status\/Exit.png' title='Exit Server' alt='Exit Server'><\/td>)?(<td><img src='img\/status\/Dir.png' title='Directory Server' alt='Directory Server'><\/td>)?(<td><img src='img\/status\/Guard.png' title='Guard Server' alt='Guard Server'><\/td>)?(<td><img src='img\/status\/Stable.png' title='Stable Server' alt='Stable Server'><\/td>)?(<td><img src='img\/status\/Authority.png' title='Authority Server' alt='Authority Server'\/><\/td>)?<td><img src='[^']+' title='([^']+)' alt='[^']+'><\/td>(<td><img src='[^']+' title='([^']*)' alt='[^']*'><\/td>)?<\/tr><\/table><\/td><td class='TDc'>(<b>)?(\d*)(<\/b>)?<\/td><td class='TDc'>(<b>)?([None\d]*)(<\/b>)?<\/td><td class='(F\d)'><\/td><\/tr>/ str = '<tr class=\'r\'><td class=\'TRR\'><a href=\'http://www.openstreetmap.org/?mlon=-0.1300&mlat=51.5000&zoom=6\' target=\'_blank\'><img src=\'img/flags/gb.gif\' class=\'flag\' width=\'18px\' title=\'//GB\' alt=\'GB\' border=\'0\'></a>&nbsp;<a href=\'router_detail.php?FP=dc358f29426fb682f96f37fb4f3538edbb94b3d4\' target=\'_blank\'>czu5kXA8zLE0</a></td><td class=\'TDb\'><table cellspacing=\'0\' cellpadding=\'0\' class=\'bwb\'><tr title=\'817 KBs\'><td class=\'bwr\'><img src=\'img/bar/1.png\' width=\'69px\' height=\'15px\' alt=\'817\'></td><td>&nbsp;<small>&nbsp;817</small></td></tr></table></td><td class=\'TDcb\'>3 d</td><td class=\'TDS\'><table class=\'iT\'><tr><td class=\'iT\'>212.38.166.231 [<a class=\'who\' href=\'/cgi-bin/whois.pl?ip=212.38.166.231\' target=\'_blank\'>212.38.166.231</a>]</td><td><img src=\'img/status/Fast.png\' title=\'Fast Server\' alt=\'Fast Server\'></td><td><img src=\'img/status/Exit.png\' title=\'Exit Server\' alt=\'Exit Server\'></td><td><img src=\'img/status/Dir.png\' title=\'Directory Server\' alt=\'Directory Server\'></td><td><img src=\'img/status/Guard.png\' title=\'Guard Server\' alt=\'Guard Server\'></td><td><img src=\'img/status/Stable.png\' title=\'Stable Server\' alt=\'Stable Server\'></td><td><img src=\'img/os-icons/Linux.png\' title=\'Tor 0.2.4.22 on Linux\' alt=\'Tor 0.2.4.22 on Linux\'></td></tr></table></td><td class=\'TDc\'>9001</td><td class=\'TDc\'>9030</td><td class=\'F0\'></td></tr> <tr class=\'r\'><td class=\'TRr\'><a href=\'http://www.openstreetmap.org/?mlon=-93.3084&mlat=37.2999&zoom=6\' target=\'_blank\'><img src=\'img/flags/us.gif\' class=\'flag\' width=\'18px\' title=\'Springfield/Missouri/US\' alt=\'US\' border=\'0\'></a>&nbsp;<a href=\'router_detail.php?FP=643b8a73713e2e948c5e3359d5bf5e4c8249aee2\' target=\'_blank\'>d00dstor</a></td><td class=\'TDb\'><table cellspacing=\'0\' cellpadding=\'0\' class=\'bwb\'><tr title=\'2 KBs\'><td class=\'bwr\'><img src=\'img/bar/1.png\' width=\'1px\' height=\'15px\' alt=\'2\'></td><td>&nbsp;<small>&nbsp;2</small></td></tr></table></td><td class=\'TDc\'>13 h</td><td class=\'TDS\'><table class=\'iT\'><tr><td class=\'iT\'>173-18-211-201.client.mchsi.com [<a class=\'who\' href=\'/cgi-bin/whois.pl?ip=173.18.211.201\' target=\'_blank\'>173.18.211.201</a>]</td><td><img src=\'img/status/Dir.png\' title=\'Directory Server\' alt=\'Directory Server\'></td><td><img src=\'img/os-icons/Linux.png\' title=\'Tor 0.2.4.22 on Linux\' alt=\'Tor 0.2.4.22 on Linux\'></td></tr></table></td><td class=\'TDc\'>9001</td><td class=\'TDc\'>9030</td><td class=\'F0\'></td></tr> <tr class=\'r\'><td class=\'TRr\'><a href=\'http://www.openstreetmap.org/?mlon=15.5000&mlat=49.7500&zoom=6\' target=\'_blank\'><img src=\'img/flags/cz.gif\' class=\'flag\' width=\'18px\' title=\'//CZ\' alt=\'CZ\' border=\'0\'></a>&nbsp;<a href=\'router_detail.php?FP=fb2b4193f34aaa980d0e8c6ec2aa71417525f4b5\' target=\'_blank\'>d1n</a></td><td class=\'TDb\'><table cellspacing=\'0\' cellpadding=\'0\' class=\'bwb\'><tr title=\'1780 KBs\'><td class=\'bwr1\'><img src=\'img/bar/2.png\' width=\'66px\' height=\'15px\' alt=\'1780\'></td><td>&nbsp;<small>&nbsp;1780</small></td></tr></table></td><td class=\'TDcb\'>2 d</td><td class=\'TDS\'><table class=\'iT\'><tr><td class=\'iT\'>185.8.237.27 [<a class=\'who\' href=\'/cgi-bin/whois.pl?ip=185.8.237.27\' target=\'_blank\'>185.8.237.27</a>]</td><td><img src=\'img/status/Fast.png\' title=\'Fast Server\' alt=\'Fast Server\'></td><td><img src=\'img/status/Dir.png\' title=\'Directory Server\' alt=\'Directory Server\'></td><td><img src=\'img/status/Guard.png\' title=\'Guard Server\' alt=\'Guard Server\'></td><td><img src=\'img/status/Stable.png\' title=\'Stable Server\' alt=\'Stable Server\'></td><td><img src=\'img/os-icons/Linux.png\' title=\'Tor 0.2.4.22 on Linux\' alt=\'Tor 0.2.4.22 on Linux\'></td></tr></table></td><td class=\'TDc\'>9001</td><td class=\'TDc\'>9030</td><td class=\'F0\'></td></tr> <tr class=\'r\'><td class=\'TRR\'><a href=\'http://www.openstreetmap.org/?mlon=4.9167&mlat=52.3500&zoom=6\' target=\'_blank\'><img src=\'img/flags/nl.gif\' class=\'flag\' width=\'18px\' title=\'Amsterdam/Noord-Holland/NL\' alt=\'NL\' border=\'0\'></a>&nbsp;<a href=\'router_detail.php?FP=6ef897645b79b6cb35e853b32506375014de3621\' target=\'_blank\'>d6relay</a></td><td class=\'TDb\'><table cellspacing=\'0\' cellpadding=\'0\' class=\'bwb\'><tr title=\'383 KBs\'><td class=\'bwr\'><img src=\'img/bar/1.png\' width=\'32px\' height=\'15px\' alt=\'383\'></td><td>&nbsp;<small>&nbsp;383</small></td></tr></table></td><td class=\'TDcb\'>22 d</td><td class=\'TDS\'><table class=\'iT\'><tr><td class=\'iT\'>charles.d6.nl [<a class=\'who\' href=\'/cgi-bin/whois.pl?ip=82.161.239.177\' target=\'_blank\'>82.161.239.177</a>]</td><td><img src=\'img/status/Fast.png\' title=\'Fast Server\' alt=\'Fast Server\'></td><td><img src=\'img/status/Dir.png\' title=\'Directory Server\' alt=\'Directory Server\'></td><td><img src=\'img/status/Guard.png\' title=\'Guard Server\' alt=\'Guard Server\'></td><td><img src=\'img/status/Stable.png\' title=\'Stable Server\' alt=\'Stable Server\'></td><td><img src=\'img/os-icons/Linux.png\' title=\'Tor 0.2.4.22 on Linux\' alt=\'Tor 0.2.4.22 on Linux\'></td></tr></table></td><td class=\'TDc\'>110</td><td class=\'TDc\'><b>80</b></td><td class=\'F0\'></td></tr> ' # Print the match result str.scan(re) do |match| puts match.to_s end

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 Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html