// 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\">{
"version": "1.1",
"test": {
}</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\">{
"version": "1.1",
"test": {
}</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/