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"
"
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 = "(?sm)<div class='race-venue'.*?<h2>(.*?)<span class='race-venue-date'>(.*?)</span>.*?</h2>.*?<span class='meeting-type'>(.*?)</span>.*?Rail Position:</b>(.*?)<br><b>Dual Track Meeting:</b>(.*?)<br><b>Track Type:</b>(.*?)<br><b>Track Condition:</b>(.*?)<br><b>Weather:</b>(.*?)<br><b>Penetrometer:</b>(.*?)<br><b>Track Information:</b>(.*?)<br /></div>"; final String string = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" + "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n" + "<head> \n" + " <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"/>\n" + " <meta name=\"description\" content=\"Racing Australia is the national industry body representing Thoroughbred racing in Australia. Australian Horse Racing results, Horse Racing Materials.\" />\n" + " <meta name=\"keywords\" content=\"Horse Racing Results,Race Results,RISA,Racing Australia, Australia Horse Racing, Australia, RISAForm, Field, Form, Racing Form,horse, horse racing, tab result, racing, racing nsw, racing victoria, horse racing result, form, jockey, horse riding, equestrian, horse race result, greyhound racing, horse betting, betting horse\" />\n" + " <title>Racing Australia | Horse Racing Results</title>\n" + " <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/design/images/favicon_risa.ico\"/>\n" + " <link href=\"/design/css/risa_web_style.css?v30\" rel=\"stylesheet\" type=\"text/css\" />\n" + " <link href=\"/design/css/search.css?v6\" rel=\"stylesheet\" type=\"text/css\" />\n" + " \n" + " <!--Racing Materials Style-->\n" + " \n" + " <!--Racing Materials JS-->\n" + " <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js\"></script>\n" + " <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js\"></script>\n" + " <script type=\"text/javascript\" src=\"/design/js/stickycontent.js\"></script><!--Sticky Race Number Menu-->\n" + " <script type=\"text/javascript\" src=\"/design/js/ddaccordion.js\"></script>\n" + " <script type=\"text/javascript\" src=\"/design/js/editable.js\"></script>\n" + " <script type=\"text/javascript\" src=\"/design/js/Generic.js\"></script>\n" + " <script type=\"text/javascript\" src=\"/design/js/jquery.autocomplete.js\"></script> \n\n" + " <!-- Google Tag Manager -->\n" + "<script> (function (w, d, s, l, i) {\n" + " w[l] = w[l] || []; w[l].push({ 'gtm.start':\n" + "new Date().getTime(), event: 'gtm.js'\n" + " }); var f = d.getElementsByTagName(s)[0],\n" + "j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =\n" + "'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);\n" + " })(window, document, 'script', 'dataLayer', 'GTM-MGS3GD7');</script>\n" + "<!-- End Google Tag Manager -->\n" + " \n\n" + " <!-- imgSlider Javascript file -->\n" + " <link href=\"/design/slider/js-image-slider.css\" rel=\"stylesheet\" />\n" + " <script src=\"/design/slider/js-image-slider.js\" type=\"text/javascript\"></script>\n" + " \n" + " <!-- Begin iPhone/iPad detection code - Sets a global variable -->\n" + " <script type=\"text/javascript\">\n" + " if ((navigator.userAgent.indexOf('iPhone') != -1) || (navigator.userAgent.indexOf('iPod') != -1) || (navigator.userAgent.indexOf('iPad') != -1)) {\n" + " var replaceSWF = 1;\n" + " } else {\n" + " var replaceSWF = 0;\n" + " }\n" + " function GoHome() {\n" + " window.location='/home.aspx';\n" + " }\n" + " </script>\n" + " <!-- End iPhone/iPad detection code -->\n" + " \n" + " <!--Asynchronous Code for google to track out bound clicks-->\n" + " <script type=\"text/javascript\">\n" + " function recordOutboundLink(link, category, action) {\n" + " _gat._getTrackerByName()._trackEvent(category, action);\n" + " setTimeout('document.location = \"' + link.href + '\"', 100);\n" + " }\n" + " </script>\n" + " <!--End Asynchronous Code-->\n" + " \n" + " <!--Google Analytics Updated Tracking 13052011-->\n" + " <script type=\"text/javascript\">\n\n" + " var _gaq = _gaq || [];\n" + " _gaq.push(['_setAccount', 'UA-6444294-13']);\n" + " _gaq.push(['_setDomainName', '.risa.com.au']);\n" + " _gaq.push(['_trackPageview']);\n" + " \n" + " (function() {\n" + " var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n" + " ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n" + " var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n" + " })();\n" + " \n" + " </script>\n" + " \n" + " <script type=\"text/javascript\">\n" + " function recordOutboundLink(link, category, action) {\n" + " try {\n" + " var pageTracker = _gat._getTracker(\"UA-6444294-13\");\n" + " pageTracker._trackEvent(category, action);\n" + " setTimeout('document.location = \"' + link.href + '\"', 100)\n" + " }catch(err){}\n" + " }\n" + " </script>\n" + " <!-- End Google Analytics Updated Tracking 13052011-->\n" + " \n" + " \n" + " <!--Google Analytics Updated Tracking 13May2015-->\n\n" + " <script type=\"text/javascript\">\n" + " (function (i, s, o, g, r, a, m) {\n" + " i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {\n" + " (i[r].q = i[r].q || []).push(arguments)\n" + " }, i[r].l = 1 * new Date(); a = s.createElement(o),\n" + " m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)\n" + " })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n\n" + " ga('create', 'UA-6444294-13', 'auto');\n" + " ga('send', 'pageview');\n\n" + " </script>\n\n\n\n\n" + " <!--Google Analytics Updated Tracking 13May2015-->\n\n\n" + " \n" + " \n" + "</head>\n" + "<body class='ShowQuickLinks'>\n" + "<div id=\"main\">\n" + " <div id=\"main-content\">\n" + " <div id=\"header\" class=\"header\">\n" + " <div id=\"header-logo\">\n" + " <a href=\"/home.aspx\" name=\"top\"><img src='/design/images/Racing-Australia-Logo.png' width=\"200\" height=\"58\" alt=\"Racing Australia Logo\" title=\"Racing Australia\" border=\"0\" /></a>\n" + " </div>\n" + " <!--\n" + " <div id=\"header-socialmedia\">\n" + " <a href=\"https://www.facebook.com/RISA10\" target=\"_blank\"><img src=\"/design/images/Facebook.png\" height=\"25\" alt=\"Go to our Facebook Page\" title=\"Go to our Facebook Page\" border=\"0\"></a>\n" + " <a href=\"https://twitter.com/#!/RacingAust\" target=\"_blank\"><img src=\"/design/images/Twitter.png\" height=\"25\" alt=\"Go to our Twitter Page\" title=\"Go to our Twitter Page\" border=\"0\"></a>\n" + " \n" + " </div>\n" + " -->\n" + " \n" + " <ul class=\"header-top-menu\">\n" + " <li><a href=\"https://myhorseracing.horse/#/site\" target=\"_blank\">My Horse Racing</a></li>\n" + " <li><a href=\"https://www.racingjobs.com.au/\" target=\"_blank\">Racing Jobs</a></li>\n" + " <li><a href=\"https://equinegeneticsresearchcentre.horse/\" target=\"_blank\">Equine Genetics Research Centre</a></li>\n" + " <li ><a href=\"https://tor.racingaustralia.horse/\" target=\"_blank\" >Trainer and Owner Reforms</a></li>\n" + " &nbsp;&nbsp;&nbsp;<a style=\"border: none;height: 19px;display: inline-block; vertical-align: middle;\" href=\"https://twitter.com/RacingAust\" target=\"_blank\"><img border=\"0\" src=\"/design/images/about_us/header-twitter.png\"/></a>&nbsp;&nbsp;<a style=\"border: none;height: 19px;display: inline-block; vertical-align: middle; margin-right: 9px;\" target=\"_blank\" href=\"https://www.facebook.com/RISA10\"><img border=\"0\" src=\"/design/images/about_us/header-facebook.png\"/></a>\n" + " </ul>\n" + " \n" + " </div>\n" + " \n\n" + "<div id=\"main-menu\">\n" + "<ul>\n" + " <li>\n" + " <a href=\"https://www.studbook.org.au/\" target=\"_blank\">AUSTRALIAN STUD BOOK</a>\n" + " </li>\n" + " \n" + " <li>\n" + " <a href=\"#\">REGISTRAR OF RACEHORSES</a>\n" + " <ul class=\"sub-menu\">\n" + " <li><a href=\"/RoR/AboutROR.aspx\">About Registrar of Racehorses</a></li>\n" + " <li><a href=\"/RoR/RegisterHorse.aspx\">Registering a Horse</a></li>\n" + " <li><a href=\"/FreeServices/horse_name_search.aspx\">Horse Name Availability Search</a></li>\n" + " <li><a href=\"/RoR/RacehorseId.aspx\">Racehorse Identification</a></li>\n" + " <li><a href=\"/RoR/TransferOwnership.aspx\">Transfer Ownership / Change of Share Percentage</a></li>\n" + " <li><a href=\"/RoR/Leasing.aspx\">Leasing a Racehorse</a></li>\n" + " <li><a href=\"/RoR/RegisterSyndicates.aspx\">Register Syndicates</a></li>\n" + " <li><a href=\"/RoR/RacingOverseasHorses.aspx\">Racing NZ &amp; overseas horses in Australia</a></li>\n" + " <li><a href=\"/RoR/DuplicatePapers.aspx\">Duplicate Papers</a></li>\n" + " <li><a href=\"/RoR/ChangingAHorseName.aspx\">Changing a Horse’s name</a></li>\n" + " <li><a href=\"/RoR/ChangeOwnersDetails.aspx\">Owners Contact Details</a></li>\n" + " <li><a href=\"/RoR/RegisteringColours.aspx\">Registering Colours</a></li>\n" + " <li><a href=\"/RoR/Forms.aspx\">Forms</a></li>\n" + " <li><a href=\"/FreeServices/Australian_Rules_Of_Racing.aspx\">Australian Rules of Racing</a></li>\n" + " <li><a href=\"/RoR/RenamedHorses.aspx\">Renamed Horses</a></li>\n" + " <!--<li><a href=\"/RoR/Login.aspx\">Login</a></li>-->\n" + " <li><a href=\"/RoR/OwnersAssociations.aspx\">Owners Associations</a></li>\n" + " \n" + " </ul>\n" + " </li>\n\n" + " <li>\n" + " <a href=\"#\">RACING MATERIALS</a>\n" + " <ul>\n" + " <li><a href=\"/FreeFields/Calendar.aspx?State=NSW\">New South Wales</a></li>\n" + " <li><a href=\"/FreeFields/Calendar.aspx?State=VIC\">Victoria</a></li>\n" + " <li><a href=\"/FreeFields/Calendar.aspx?State=QLD\">Queensland</a></li>\n" + " <li><a href=\"/FreeFields/Calendar.aspx?State=WA\">Western Australia</a></li>\n" + " <li><a href=\"/FreeFields/Calendar.aspx?State=SA\">South Australia</a></li>\n" + " <li><a href=\"/FreeFields/Calendar.aspx?State=TAS\">Tasmania</a></li>\n" + " <li><a href=\"/FreeFields/Calendar.aspx?State=ACT\">Australian Capital Territory</a></li>\n" + " <li><a href=\"/FreeFields/Calendar.aspx?State=NT\">Northern Territory</a></li>\n" + " <!--li><a href=\"/FreeFields/GroupAndListedRaces.aspx\">Group & Listed Races / Classifications</a></li-->\n" + " </ul>\n" + " </li>\n" + " <!--li>\n" + " <a href=\"#\">RULES & PUBLICATIONS</a>\n" + " <ul>\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " </ul>\n" + " </li-->\n\n" + " <li class=\"login\" style=\"margin-right: 14px !important;\">\n" + " <a href=\"#\" class=\"login-a\">LOGINS</a>\n" + " <ul>\n" + " <li><a href=\"/IndustryLogin/SNS_Login.aspx\">SNS</a></li>\n" + " <li><a href=\"/IndustryLogin/Stable_Assist_Login.aspx\">Stable Assist</a></li>\n" + " <li><a target=\"_blank\" href=\"https://studbook.org.au/\">ASB Subscriptions</a></li>\n" + " <li><a href=\"/IndustryLogin/RSB_subscribers_Login.aspx\">RSB Subscribers</a></li>\n" + " <!--li><a href=\"/IndustryLogin/Form_subscribers_Login.aspx\">RISA Form Subscribers</a></li-->\n" + " <li><a href=\"/IndustryLogin/Connect_Login.aspx\">Connect Login</a></li>\n" + " <li><a href=\"https://risa.webex.com\" target=\"_blank\">Webex</a></li> \n" + " <li><a href=\"/arb/Racingappeals.aspx\">Racing Appeals</a></li>\n" + " </ul>\n" + " </li>\n" + " <li class=\"about-us\">\n" + " <a href=\"/ContactUs/default.aspx\">ABOUT US</a>\n" + " <ul>\n" + " <li><a href=\"/Aboutus/Vision-Core-Functions.aspx\">Vision & Core Functions</a></li>\n" + " <li><a href=\"/Aboutus/History.aspx\">History</a></li>\n" + " <li><a href=\"/Aboutus/Role-and-Services.aspx\">Our Role</a></li>\n" + " <li><a href=\"/Aboutus/Board.aspx\">The Board</a></li>\n" + " <li><a href=\"/Aboutus/Management.aspx\">The Team</a></li>\n" + " <li><a href=\"#\">Publications&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp></a>\n" + " <ul style=\"padding-top:0px\">\n" + " <li><a href=\"/Aboutus/AnnualReport.aspx\">Annual Report</a></li>\n" + " <li><a href=\"/Aboutus/FactBook.aspx\">Fact Book</a></li>\n" + " <li><a href=\"https://ier-study.racingaustralia.horse/\">Industry Study</a></li>\n" + " </ul>\n" + " </li>\n" + " <li><a href=\"/FreeServices/Australian_Rules_Of_Racing.aspx\">Australian Rules Of Racing</a></li>\n" + " <li><a href=\"/FreeServices/MediaReleases.aspx\">Media Releases</a></li>\n" + " <!--li><a href=\"/Aboutus/sns.aspx\">About SNS</a></li-->\n" + " <!--li><a href=\"#\">Animal Welfare</a></li-->\n" + " <li><a href=\"/Licensing/Licensing.aspx\">Licensing</a></li>\n" + " <li><a href=\"/FreeServices/PerformanceReport.aspx\">Monthly Performance Report</a></li>\n" + " <li><a href=\"/ContactUs/\">Contact Us</a></li>\n" + " <li><a href=\"/FAQ/FAQ.aspx\">FAQ</a></li>\n" + " <li><a target=\"_blank\" href=\"https://racingaustraliasystemsstatus.horse/\">Racing Australia </br>Systems Status Updates</a></li>\n" + " </ul>\n" + " </li>\n" + " \n" + "</ul> \n" + "</div>\n" + " <div>\n" + " \n\n\n" + " </div>\n" + " <div id=\"middle-container\">\n" + " <div id=\"info-container\">\n" + " \n\n\n" + "<div id=\"grey-content\">\n" + " <div id=\"page-content\">\n" + " <div class=\"state-specific-banner\">\n\n" + " <a href=\"https://www.racingqueensland.com.au/Going-to-the-races/Event-search?what=Thoroughbred\" target=\"_blank\" onClick=\"ga('send', 'event', 'Outbound Link', 'Click', '2019 RQ Winter Carnival');\">\n" + " <img src='../../design/images/adverts/2019_Winter_QLD_Banner.jpg' width='728' height='90' alt='2019 RQ Winter Carnival' border='0'/></a>\n\n" + " <img width='0' height='0' src=\"data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" onload=\"ga('send', 'event', 'Outbound Link', 'Impression','2019 RQ Winter Carnival',0, {'nonInteraction': 1});\"/>\n" + " \n\n" + "</div>\n\n\n\n\n\n" + "<div class=\"tab-menu\">\n" + " <div class=\"inactive-tab\"><a href=\"/FreeFields/RaceProgram.aspx?Key=2019Mar14%2CQLD%2CBeaudesert\">Programs</a></div>\n" + " <div class=\"inactive-tab\"><a href=\"/FreeFields/Nominations.aspx?Key=2019Mar14%2CQLD%2CBeaudesert\">Nominations</a></div>\n" + " <div class=\"inactive-tab\"><a href=\"/FreeFields/Weights.aspx?Key=2019Mar14%2CQLD%2CBeaudesert\">Weights</a></div>\n" + " <div class=\"inactive-tab\"><a href=\"/FreeFields/Acceptances.aspx?Key=2019Mar14%2CQLD%2CBeaudesert\">Acceptances</a></div>\n" + " <div class=\"inactive-tab\"><a href=\"/FreeFields/Form.aspx?Key=2019Mar14%2CQLD%2CBeaudesert&recentForm=Y\">Recent Form</a></div>\n" + " <div class=\"inactive-tab\"><a href=\"/FreeFields/AllForm.aspx?Key=2019Mar14%2CQLD%2CBeaudesert&recentForm=N\">All Form</a></div>\n" + " <div class=\"inactive-tab\"><a href=\"/FreeFields/GearChanges.aspx?Key=2019Mar14%2CQLD%2CBeaudesert\">Gear</a></div>\n" + " <div class=\"inactive-tab\"><a href=\"/FreeFields/Scratchings.aspx?Key=2019Mar14%2CQLD%2CBeaudesert\">Scratchings</a></div>\n" + " <div class=\"active-tab\"><a href=\"/FreeFields/Results.aspx?Key=2019Mar14%2CQLD%2CBeaudesert\">Results</a></div>\n" + " \n" + "</div>\n" + "<div class=\"clear-space\">&nbsp;</div>\n" + "<div class='race-venue'>\n" + " <div class='top'>\n" + " <h2>\n" + " Beaudesert: Beaudesert Race Club\n" + " <span class='race-venue-date'>Thursday, 14 March 2019</span>\n" + " </h2>\n" + " <span class='meeting-type'>Meeting Type: Provincial (TAB MEETING)</span>\n" + " <div class=\"printer-friendly\">\n" + " <a href='?Key=2019Mar14,QLD,Beaudesert&amp;BodyClass=PrintFriendly' target='_blank'><img src=\"/design/images/print_friendly_btn.png\" alt=\"Print Friendly Version\" title=\"Print Friendly Version\" border=\"0\" width=\"30\" height=\"19\">Print Friendly</a>\n" + " </div> \n" + " </div>\n" + "</div>\n" + "<div class='race-venue-bottom'>\n" + "<div class='col1'><b>Rail Position:</b> +2m 700m-250m, Cutaway from 250m, True Remainder<br><b>Dual Track Meeting:</b> N<br><b>Track Type:</b> Turf<br><b>Track Condition:</b> Good 3<br><b>Weather:</b> Hot<br><b>Penetrometer:</b> <br><b>Track Information:</b> <br /></div><div class='col2'><b>Results Last Published:</b> Fri 15-Mar-19 11:08AM AEDT<br></div>\n" + " <div class='comments'>"; 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