Regular Expressions 101

Save & Share

  • Regex Version: ver. 1
  • Update Regex
    ctrl+⇧+s
  • Save new Regex
    ctrl+s
  • Add to Community Library

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

/
/
g

Test String

Code Generator

Generated Code

const regex = /\d{1,2}\.?\d*(?=&nbsp;&deg;C)/g; // Alternative syntax using RegExp constructor // const regex = new RegExp('\\d{1,2}\\.?\\d*(?=&nbsp;&deg;C)', 'g') const str = `<!DOCTYPE html> <!-- Pi-hole: A black hole for Internet advertisements * (c) 2017 Pi-hole, LLC (https://pi-hole.net) * Network-wide ad blocking via your own hardware. * * This file is copyright under the latest version of the EUPL. * Please see LICENSE file for your rights under this license. --> <html> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Security-Policy" content="default-src 'self' https://api.github.com; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"> <title>Pi-hole Admin Console</title> <!-- Usually browsers proactively perform domain name resolution on links that the user may choose to follow. We disable DNS prefetching here --> <meta http-equiv="x-dns-prefetch-control" content="off"> <!-- Tell the browser to be responsive to screen width --> <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> <link rel="shortcut icon" href="img/favicon.png" type="image/x-icon" /> <meta name="theme-color" content="#367fa9"> <link rel="apple-touch-icon" sizes="180x180" href="img/favicon.png"> <link rel="icon" type="image/png" sizes="192x192" href="img/logo.svg"> <link rel="icon" type="image/png" sizes="96x96" href="img/logo.svg"> <meta name="msapplication-TileColor" content="#367fa9"> <meta name="msapplication-TileImage" content="img/logo.svg"> <meta name="apple-mobile-web-app-capable" content="yes"> <link href="style/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> <link href="style/vendor/font-awesome-4.5.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" /> <link href="style/vendor/ionicons-2.0.1/css/ionicons.min.css" rel="stylesheet" type="text/css" /> <link href="style/vendor/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css" /> <link href="style/vendor/daterangepicker.css" rel="stylesheet" type="text/css" /> <link href="style/vendor/AdminLTE.min.css" rel="stylesheet" type="text/css" /> <link href="style/vendor/skin-blue.min.css" rel="stylesheet" type="text/css" /> <link href="style/pi-hole.css" rel="stylesheet" type="text/css" /> <link rel="icon" type="image/png" sizes="160x160" href="img/logo.svg" /> <style type="text/css"> .glow { text-shadow: 0px 0px 5px #fff; } .small-box span { transition-duration: 500ms } </style> <!--[if lt IE 9]> <script src="scripts/vendor/html5shiv.min.js"></script> <script src="scripts/vendor/respond.min.js"></script> <![endif]--> </head> <body class="skin-blue sidebar-mini layout-boxed"> <!-- JS Warning --> <div> <link rel="stylesheet" type="text/css" href="style/vendor/js-warn.css"> <input type="checkbox" id="js-hide" /> <div class="js-warn" id="js-warn-exit"><h1>Javascript Is Disabled</h1><p>Javascript seems to be disabled. This will break some site features.</p> <p>To enable Javascript click <a href="http://www.enable-javascript.com/" target="_blank">here</a></p><label for="js-hide">Close</label></div> </div> <!-- /JS Warning --> <div id='token' hidden>YMk1aEpyY1dGrbjW80c1c0sH0ORzkoWC78MwL1YtJU4=</div><script src="scripts/pi-hole/js/header.js"></script> <!-- Send token to JS --> <div id="token" hidden>YMk1aEpyY1dGrbjW80c1c0sH0ORzkoWC78MwL1YtJU4=</div> <div id="enableTimer" hidden>1519878485000</div> <div class="wrapper"> <header class="main-header"> <!-- Logo --> <a href="http://pi-hole.net" class="logo" target="_blank"> <!-- mini logo for sidebar mini 50x50 pixels --> <span class="logo-mini">P<b>h</b></span> <!-- logo for regular state and mobile devices --> <span class="logo-lg">Pi-<b>hole</b></span> </a> <!-- Header Navbar: style can be found in header.less --> <nav class="navbar navbar-static-top" role="navigation"> <!-- Sidebar toggle button--> <a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button"> <span class="sr-only">Toggle navigation</span> </a> <div class="navbar-custom-menu"> <ul class="nav navbar-nav"> <li><a style="pointer-events:none;"><samp>raspberrypi</samp></a></li> <li class="dropdown user user-menu"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="true"> <img src="img/logo.svg" class="user-image" style="border-radius: initial" sizes="160x160" alt="Pi-hole logo" /> <span class="hidden-xs">Pi-hole</span> </a> <ul class="dropdown-menu" style="right:0"> <!-- User image --> <li class="user-header"> <img src="img/logo.svg" sizes="160x160" alt="User Image" style="border-color:transparent" /> <p> Open Source Ad Blocker <small>Designed For Raspberry Pi</small> </p> </li> <!-- Menu Body --> <li class="user-body"> <div class="col-xs-4 text-center"> <a class="btn-link" href="https://github.com/pi-hole" target="_blank">GitHub</a> </div> <div class="col-xs-4 text-center"> <a class="btn-link" href="https://pi-hole.net" target="_blank">Website</a> </div> <div class="col-xs-4 text-center"> <a class="btn-link" href="https://github.com/pi-hole/pi-hole/releases" target="_blank">Updates</a> </div> <div class="col-xs-12 text-center" id="sessiontimer"> <b>Session is valid for <span id="sessiontimercounter">0</span></b> </div> </li> <!-- Menu Footer --> <li class="user-footer"> <!-- Version Infos --> <!-- PayPal --> <div class="text-center"> <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=3J2L3Z4DHW9UY" target="_blank" style="background:none"> <img src="img/donate.gif" alt="Donate"> </a> </div> </li> </ul> </li> </ul> </div> </nav> </header> <!-- Left side column. contains the logo and sidebar --> <aside class="main-sidebar"> <!-- sidebar: style can be found in sidebar.less --> <section class="sidebar"> <!-- Sidebar user panel --> <div class="user-panel"> <div class="pull-left image"> <img src="img/logo.svg" class="img-responsive" alt="Pi-hole logo" style="display: table; table-layout: fixed; height: 67px;" /> </div> <div class="pull-left info"> <p>Status</p> <a id="status"><i class="fa fa-circle" style="color:#7FFF00"></i> Active</a><a id="temperature"><i class="fa fa-fire" style="color:#3366FF"></i> Temp:&nbsp;45.1&nbsp;&deg;C</a> <br/> <a title="Detected 4 cores"><i class="fa fa-circle" style="color:#7FFF00"></i> Load:&nbsp;&nbsp;0.08&nbsp;&nbsp;0.02&nbsp;&nbsp;0.01</a> <br/> <a><i class="fa fa-circle" style="color:#7FFF00"></i> Memory usage:&nbsp;&nbsp;6.5&thinsp;%</a> </div> </div> <!-- sidebar menu: : style can be found in sidebar.less --> <ul class="sidebar-menu"> <li class="header">MAIN NAVIGATION</li> <!-- Home Page --> <li class="active"> <a href="index.php"> <i class="fa fa-home"></i> <span>Dashboard</span> </a> </li> <!-- Query Log --> <li> <a href="queries.php"> <i class="fa fa-file-text-o"></i> <span>Query Log</span> </a> </li> <li class="treeview"> <a href="#"> <span class="pull-right-container"> <i class="fa fa-angle-down pull-right" style="padding-right: 5px;"></i> </span> <i class="fa fa-clock-o"></i> <span>Long term data</span> </a> <ul class="treeview-menu"> <li> <a href="db_graph.php"> <i class="fa fa-file-text-o"></i> <span>Graphics</span> </a> </li> <li> <a href="db_queries.php"> <i class="fa fa-file-text-o"></i> <span>Query Log</span> </a> </li> <li> <a href="db_lists.php"> <i class="fa fa-file-text-o"></i> <span>Top Lists</span> </a> </li> </ul> </li> <!-- Whitelist --> <li> <a href="list.php?l=white"> <i class="fa fa-pencil-square-o"></i> <span>Whitelist</span> </a> </li> <!-- Blacklist --> <li> <a href="list.php?l=black"> <i class="fa fa-ban"></i> <span>Blacklist</span> </a> </li> <!-- Toggle --> <li id="pihole-disable" class="treeview"> <a href="#"> <span class="pull-right-container"> <i class="fa fa-angle-down pull-right" style="padding-right: 5px;"></i> </span> <i class="fa fa-stop"></i> <span>Disable</span>&nbsp;&nbsp;&nbsp;<span id="flip-status-disable"></span> </a> <ul class="treeview-menu"> <li> <a href="#" id="pihole-disable-permanently"> <i class="fa fa-stop"></i> <span>Permanently</span> </a> </li> <li> <a href="#" id="pihole-disable-10s"> <i class="fa fa-clock-o"></i> <span>For 10 seconds</span> </a> </li> <li> <a href="#" id="pihole-disable-30s"> <i class="fa fa-clock-o"></i> <span>For 30 seconds</span> </a> </li> <li> <a href="#" id="pihole-disable-5m"> <i class="fa fa-clock-o"></i> <span>For 5 minutes</span> </a> </li> <li> <a href="#" id="pihole-disable-cst" data-toggle="modal" data-target="#customDisableModal"> <i class="fa fa-clock-o"></i> <span>Custom time</span> </a> </li> </ul> <!-- <a href="#" id="flip-status"><i class="fa fa-stop"></i> <span>Disable</span></a> --> </li> <li id="pihole-enable" class="treeview" hidden="true"> <a href="#"><i class="fa fa-play"></i> <span id="enableLabel">Enable</span>&nbsp;&nbsp;&nbsp;<span id="flip-status-enable"></span></a> </li> <!-- Tools --> <li class="treeview "> <a href="#"> <span class="pull-right-container"> <i class="fa fa-angle-down pull-right" style="padding-right: 5px;"></i> </span> <i class="fa fa-folder"></i> <span>Tools</span> </a> <ul class="treeview-menu"> <!-- Run gravity.sh --> <li> <a href="gravity.php"> <i class="fa fa-arrow-circle-down"></i> <span>Update Lists</span> </a> </li> <!-- Query adlists --> <li> <a href="queryads.php"> <i class="fa fa-search"></i> <span>Query adlists</span> </a> </li> <!-- Audit log --> <li> <a href="auditlog.php"> <i class="fa fa-balance-scale"></i> <span>Audit log</span> </a> </li> <!-- Tail pihole.log --> <li> <a href="taillog.php"> <i class="fa fa-list-ul"></i> <span>Tail pihole.log</span> </a> </li> <!-- Tail pihole-FTL.log --> <li> <a href="taillog-FTL.php"> <i class="fa fa-list-ul"></i> <span>Tail pihole-FTL.log</span> </a> </li> <!-- Generate debug log --> <li> <a href="debug.php"> <i class="fa fa-ambulance"></i> <span>Generate debug log</span> </a> </li> </ul> </li> <!-- Settings --> <li> <a href="settings.php"> <i class="fa fa-gears"></i> <span>Settings</span> </a> </li> <!-- Logout --> <!-- Login --> <!-- Donate --> <li> <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3J2L3Z4DHW9UY" target="_blank"> <i class="fa fa-paypal"></i> <span>Donate</span> </a> </li> <!-- Help --> <li> <a href="help.php"> <i class="fa fa-question-circle"></i> <span>Help</span> </a> </li> </ul> </section> <!-- /.sidebar --> </aside> <!-- Content Wrapper. Contains page content --> <div class="content-wrapper"> <!-- Main content --> <section class="content"> <!-- Small boxes (Stat box) --> <div class="row"> <div class="col-lg-3 col-xs-12"> <!-- small box --> <div class="small-box bg-green"> <div class="inner"> <p>Total queries (<span id="unique_clients">-</span> clients)</p> <h3 class="statistic"><span id="dns_queries_today">---</span></h3> </div> <div class="icon"> <i class="ion ion-earth"></i> </div> </div> </div> <!-- ./col --> <div class="col-lg-3 col-xs-12"> <!-- small box --> <div class="small-box bg-aqua"> <div class="inner"> <p>Queries Blocked</p> <h3 class="statistic"><span id="ads_blocked_today">---</span></h3> </div> <div class="icon"> <i class="ion ion-android-hand"></i> </div> </div> </div> <!-- ./col --> <div class="col-lg-3 col-xs-12"> <!-- small box --> <div class="small-box bg-yellow"> <div class="inner"> <p>Percent Blocked</p> <h3 class="statistic"><span id="ads_percentage_today">---</span></h3> </div> <div class="icon"> <i class="ion ion-pie-graph"></i> </div> </div> </div> <!-- ./col --> <div class="col-lg-3 col-xs-12"> <!-- small box --> <div class="small-box bg-red" title="Blocking list updated 2 days, 20:06 ago"> <div class="inner"> <p>Domains on Blocklist</p> <h3 class="statistic"><span id="domains_being_blocked">---</span></h3> </div> <div class="icon"> <i class="ion ion-ios-list"></i> </div> </div> </div> <!-- ./col --> </div> <div class="row"> <div class="col-md-12"> <div class="box" id="queries-over-time"> <div class="box-header with-border"> <h3 class="box-title">Queries over last 24 hours</h3> </div> <div class="box-body"> <div class="chart"> <canvas id="queryOverTimeChart" width="800" height="140"></canvas> </div> </div> <div class="overlay"> <i class="fa fa-refresh fa-spin"></i> </div> <!-- /.box-body --> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="box" id="clients"> <div class="box-header with-border"> <h3 class="box-title">Clients (over time)</h3> </div> <div class="box-body"> <div class="chart"> <canvas id="clientsChart" width="800" height="140"></canvas> </div> </div> <div class="overlay"> <i class="fa fa-refresh fa-spin"></i> </div> <!-- /.box-body --> </div> </div> </div> <div class="row"> <div class="col-md-12 col-lg-6"> <div class="box" id="query-types-pie"> <div class="box-header with-border"> <h3 class="box-title">Query Types (integrated)</h3> </div> <div class="box-body"> <div class="chart"> <canvas id="queryTypePieChart" width="400" height="150"></canvas> </div> </div> <div class="overlay"> <i class="fa fa-refresh fa-spin"></i> </div> <!-- /.box-body --> </div> </div> <div class="col-md-12 col-lg-6"> <div class="box" id="forward-destinations-pie"> <div class="box-header with-border"> <h3 class="box-title">Forward Destinations (integrated)</h3> </div> <div class="box-body"> <div class="chart"> <canvas id="forwardDestinationPieChart" width="400" height="150"></canvas> </div> </div> <div class="overlay"> <i class="fa fa-refresh fa-spin"></i> </div> <!-- /.box-body --> </div> </div> </div> <div class="row"> <div class="col-md-6"> <div class="box" id="domain-frequency"> <div class="box-header with-border"> <h3 class="box-title">Top Domains</h3> </div> <!-- /.box-header --> <div class="box-body"> <div class="table-responsive"> <table class="table table-bordered"> <tbody> <tr> <th>Domain</th> <th>Hits</th> <th>Frequency</th> </tr> </tbody> </table> </div> </div> <div class="overlay"> <i class="fa fa-refresh fa-spin"></i> </div> <!-- /.box-body --> </div> <!-- /.box --> </div> <!-- /.col --> <div class="col-md-6"> <div class="box" id="ad-frequency"> <div class="box-header with-border"> <h3 class="box-title">Top Blocked Domains</h3> </div> <!-- /.box-header --> <div class="box-body"> <div class="table-responsive"> <table class="table table-bordered"> <tbody> <tr> <th>Domain</th> <th>Hits</th> <th>Frequency</th> </tr> </tbody> </table> </div> </div> <div class="overlay"> <i class="fa fa-refresh fa-spin"></i> </div> <!-- /.box-body --> </div> <!-- /.box --> </div> <!-- /.col --> <div class="col-md-6"> <div class="box" id="client-frequency"> <div class="box-header with-border"> <h3 class="box-title">Top Clients</h3> </div> <!-- /.box-header --> <div class="box-body"> <div class="table-responsive"> <table class="table table-bordered"> <tbody> <tr> <th>Client</th> <th>Requests</th> <th>Frequency</th> </tr> </tbody> </table> </div> </div> <div class="overlay"> <i class="fa fa-refresh fa-spin"></i> </div> <!-- /.box-body --> </div> <!-- /.box --> </div> <!-- /.col --> </div> <!-- /.row --> </section> <!-- /.content --> </div> <!-- Modal for custom disable time --> <div class="modal fade" id="customDisableModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog modal-sm" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <h4 class="modal-title" id="myModalLabel">Custom disable timeout</h4> </div> <div class="modal-body"> <div class="input-group"> <input id="customTimeout" class="form-control" type="number" value="60"> <div class="input-group-btn" data-toggle="buttons"> <label class="btn btn-default"> <input type="radio"/> Secs </label> <label id="btnMins" class="btn btn-default active"> <input type="radio" /> Mins </label> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <button id="pihole-disable-custom" type="button" class="btn btn-primary" data-dismiss="modal">Submit</button> </div> </div> </div> </div> <!-- /.content-wrapper --> <footer class="main-footer"> <!-- Version Infos --> <div class="pull-right hidden-xs hidden-sm"> <b>Pi-hole Version </b> v3.3 <b>Web Interface Version </b>v3.3 <b>FTL Version </b> v3.0 </div> <div style="display: inline-block"><strong><a href="https://pi-hole.net/donate" target="_blank"><i class="fa fa-heart"></i> Donate</a></strong> if you found this useful.</div> </footer> </div> <!-- ./wrapper --> <script src="scripts/vendor/jquery.min.js"></script> <script src="scripts/vendor/jquery-ui.min.js"></script> <script src="style/vendor/bootstrap/js/bootstrap.min.js"></script> <script src="scripts/vendor/app.min.js"></script> <script src="scripts/vendor/jquery.dataTables.min.js"></script> <script src="scripts/vendor/dataTables.bootstrap.min.js"></script> <script src="scripts/vendor/Chart.bundle.min.js"></script> <script src="scripts/pi-hole/js/footer.js"></script> </body> </html> <script src="scripts/pi-hole/js/index.js"></script>`; // Reset `lastIndex` if this regex is defined globally // regex.lastIndex = 0; let m; while ((m = regex.exec(str)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex.lastIndex++; } // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { console.log(`Found match, group ${groupIndex}: ${match}`); }); }

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 JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions