Regular Expressions 101

Save & Share

  • Regex Version: ver. 2
  • 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

`
`
sg

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 = " *<hashTree>. *<JSONPathAssertion.*?</JSONPathAssertion>. *<hashTree/>. *</hashTree>."; final String string = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<jmeterTestPlan version=\"1.2\" properties=\"5.0\" jmeter=\"5.1.1 r1855137\">\n" + " <hashTree>\n" + " <TestPlan guiclass=\"TestPlanGui\" testclass=\"TestPlan\" testname=\"test one\" enabled=\"true\">\n" + " <stringProp name=\"TestPlan.comments\"></stringProp>\n" + " <boolProp name=\"TestPlan.functional_mode\">false</boolProp>\n" + " <boolProp name=\"TestPlan.tearDown_on_shutdown\">true</boolProp>\n" + " <boolProp name=\"TestPlan.serialize_threadgroups\">false</boolProp>\n" + " <elementProp name=\"TestPlan.user_defined_variables\" elementType=\"Arguments\" guiclass=\"ArgumentsPanel\" testclass=\"Arguments\" testname=\"User Defined Variables\" enabled=\"true\">\n" + " <collectionProp name=\"Arguments.arguments\"/>\n" + " </elementProp>\n" + " <stringProp name=\"TestPlan.user_define_classpath\"></stringProp>\n" + " </TestPlan>\n" + " <hashTree>\n" + " <com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroup guiclass=\"com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroupGui\" testclass=\"com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroup\" testname=\"Thread - main\" enabled=\"true\">\n" + " <elementProp name=\"ThreadGroup.main_controller\" elementType=\"com.blazemeter.jmeter.control.VirtualUserController\"/>\n" + " <stringProp name=\"ThreadGroup.on_sample_error\">continue</stringProp>\n" + " <stringProp name=\"TargetLevel\">${__P(threads, 1)}</stringProp>\n" + " <stringProp name=\"RampUp\">${__P(time, 1)}</stringProp>\n" + " <stringProp name=\"Steps\">${__P(steps, 1)}</stringProp>\n" + " <stringProp name=\"Hold\">${__P(hold, 3)}</stringProp>\n" + " <stringProp name=\"LogFilename\"></stringProp>\n" + " <stringProp name=\"Iterations\"></stringProp>\n" + " <stringProp name=\"Unit\">M</stringProp>\n" + " </com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroup>\n" + " <hashTree>\n" + " <GenericController guiclass=\"LogicControllerGui\" testclass=\"GenericController\" testname=\"Simple Controller - main\" enabled=\"true\"/>\n" + " <hashTree>\n" + " <HTTPSamplerProxy guiclass=\"HttpTestSampleGui\" testclass=\"HTTPSamplerProxy\" testname=\"REQUEST1\" enabled=\"true\">\n" + " <boolProp name=\"HTTPSampler.postBodyRaw\">true</boolProp>\n" + " <elementProp name=\"HTTPsampler.Arguments\" elementType=\"Arguments\">\n" + " <collectionProp name=\"Arguments.arguments\">\n" + " <elementProp name=\"\" elementType=\"HTTPArgument\">\n" + " <boolProp name=\"HTTPArgument.always_encode\">false</boolProp>\n" + " <stringProp name=\"Argument.value\">{&#xd;\n" + " &quot;version&quot;: &quot;1.1&quot;,&#xd;\n" + " &quot;test&quot;: {&#xd;\n" + "}</stringProp>\n" + " <stringProp name=\"Argument.metadata\">=</stringProp>\n" + " </elementProp>\n" + " </collectionProp>\n" + " </elementProp>\n" + " <stringProp name=\"HTTPSampler.domain\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.port\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.protocol\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.contentEncoding\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.path\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.method\">POST</stringProp>\n" + " <boolProp name=\"HTTPSampler.follow_redirects\">false</boolProp>\n" + " <boolProp name=\"HTTPSampler.auto_redirects\">false</boolProp>\n" + " <boolProp name=\"HTTPSampler.use_keepalive\">true</boolProp>\n" + " <boolProp name=\"HTTPSampler.DO_MULTIPART_POST\">false</boolProp>\n" + " <stringProp name=\"HTTPSampler.embedded_url_re\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.connect_timeout\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.response_timeout\"></stringProp>\n" + " </HTTPSamplerProxy>\n" + " <hashTree>\n" + " <JSONPathAssertion guiclass=\"JSONPathAssertionGui\" testclass=\"JSONPathAssertion\" testname=\"JSON Assertion\" enabled=\"true\">\n" + " <stringProp name=\"JSON_PATH\">$.status</stringProp>\n" + " <stringProp name=\"EXPECTED_VALUE\">ok</stringProp>\n" + " <boolProp name=\"JSONVALIDATION\">true</boolProp>\n" + " <boolProp name=\"EXPECT_NULL\">false</boolProp>\n" + " <boolProp name=\"INVERT\">false</boolProp>\n" + " <boolProp name=\"ISREGEX\">false</boolProp>\n" + " </JSONPathAssertion>\n" + " <hashTree/>\n" + " <JSR223PreProcessor guiclass=\"TestBeanGUI\" testclass=\"JSR223PreProcessor\" testname=\"JSR223 PreProcessor\" enabled=\"true\">\n" + " <stringProp name=\"cacheKey\">true</stringProp>\n" + " <stringProp name=\"filename\"></stringProp>\n" + " <stringProp name=\"parameters\"></stringProp>\n" + " <stringProp name=\"script\">// period in the past - year-month-day, set from properties in User Defined Variables\n\n" + "import java.time.Instant;\n" + "import java.time.temporal.ChronoUnit;\n" + "import groovy.json.JsonOutput;\n" + "import org.apache.commons.lang.RandomStringUtils;</stringProp>\n" + " <stringProp name=\"scriptLanguage\">groovy</stringProp>\n" + " </JSR223PreProcessor>\n" + " <hashTree/>\n" + " <JSR223PostProcessor guiclass=\"TestBeanGUI\" testclass=\"JSR223PostProcessor\" testname=\"JSR223 PostProcessor\" enabled=\"true\">\n" + " <stringProp name=\"cacheKey\">true</stringProp>\n" + " <stringProp name=\"filename\"></stringProp>\n" + " <stringProp name=\"parameters\"></stringProp>\n" + " <stringProp name=\"script\">import java.time.Instant;\n" + "import java.time.temporal.ChronoUnit;</stringProp>\n" + " <stringProp name=\"scriptLanguage\">groovy</stringProp>\n" + " </JSR223PostProcessor>\n" + " <hashTree/>\n" + " </hashTree>\n" + " <IfController guiclass=\"IfControllerPanel\" testclass=\"IfController\" testname=\"If Controller\" enabled=\"true\">\n" + " <stringProp name=\"IfController.condition\">${__groovy(${random_variable} == 1)}</stringProp>\n" + " <boolProp name=\"IfController.evaluateAll\">false</boolProp>\n" + " <boolProp name=\"IfController.useExpression\">true</boolProp>\n" + " </IfController>\n" + " <hashTree>\n" + " <RandomController guiclass=\"RandomControlGui\" testclass=\"RandomController\" testname=\"Random Controller\" enabled=\"true\">\n" + " <intProp name=\"InterleaveControl.style\">1</intProp>\n" + " </RandomController>\n" + " <hashTree>\n" + " <HTTPSamplerProxy guiclass=\"HttpTestSampleGui\" testclass=\"HTTPSamplerProxy\" testname=\"REQUEST2\" enabled=\"true\">\n" + " <boolProp name=\"HTTPSampler.postBodyRaw\">true</boolProp>\n" + " <elementProp name=\"HTTPsampler.Arguments\" elementType=\"Arguments\">\n" + " <collectionProp name=\"Arguments.arguments\">\n" + " <elementProp name=\"\" elementType=\"HTTPArgument\">\n" + " <boolProp name=\"HTTPArgument.always_encode\">false</boolProp>\n" + " <stringProp name=\"Argument.value\">{&#xd;\n" + " &quot;version&quot;: &quot;1.1&quot;,&#xd;\n" + " &quot;test&quot;: {&#xd;\n" + "}</stringProp>\n" + " <stringProp name=\"Argument.metadata\">=</stringProp>\n" + " </elementProp>\n" + " </collectionProp>\n" + " </elementProp>\n" + " <stringProp name=\"HTTPSampler.domain\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.port\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.protocol\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.contentEncoding\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.path\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.method\">POST</stringProp>\n" + " <boolProp name=\"HTTPSampler.follow_redirects\">false</boolProp>\n" + " <boolProp name=\"HTTPSampler.auto_redirects\">false</boolProp>\n" + " <boolProp name=\"HTTPSampler.use_keepalive\">true</boolProp>\n" + " <boolProp name=\"HTTPSampler.DO_MULTIPART_POST\">false</boolProp>\n" + " <stringProp name=\"HTTPSampler.embedded_url_re\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.connect_timeout\"></stringProp>\n" + " <stringProp name=\"HTTPSampler.response_timeout\"></stringProp>\n" + " </HTTPSamplerProxy>\n" + " <hashTree>\n" + " <JSONPathAssertion guiclass=\"JSONPathAssertionGui\" testclass=\"JSONPathAssertion\" testname=\"JSON Assertion\" enabled=\"true\">\n" + " <stringProp name=\"JSON_PATH\">$.status</stringProp>\n" + " <stringProp name=\"EXPECTED_VALUE\">ok</stringProp>\n" + " <boolProp name=\"JSONVALIDATION\">true</boolProp>\n" + " <boolProp name=\"EXPECT_NULL\">false</boolProp>\n" + " <boolProp name=\"INVERT\">false</boolProp>\n" + " <boolProp name=\"ISREGEX\">false</boolProp>\n" + " </JSONPathAssertion>\n" + " <hashTree/>\n" + " </hashTree>\n" + " </hashTree>\n" + " </hashTree>\n" + " </hashTree>\n" + " </hashTree>\n" + " </hashTree>\n" + " </hashTree>\n" + "</jmeterTestPlan>"; final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); 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