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

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

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 Rust, please visit: https://docs.rs/regex/latest/regex/