using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @" *<hashTree>. *<JSONPathAssertion.*?</JSONPathAssertion>. *<hashTree/>. *</hashTree>.";
string input = @"<?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>";
RegexOptions options = RegexOptions.Singleline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
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 C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx