<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en">
<head>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<title>Apache JMeter
          -
          User's Manual: Regular Expressions</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="../css/new-style.css">
<link rel="apple-touch-icon-precomposed" href="../images/apple-touch-icon.png">
<link rel="icon" href="../images/favicon.png">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="../images/mstile-144x144.png">
<meta name="theme-color" content="#ffffff">
</head>
<body role="document">
<a href="#content" class="hidden">Main content</a>
<div class="header">
<!--
            APACHE LOGO
          -->
<div>
<a href="https://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="../images/asf-logo.svg" alt="Logo ASF"></a>
</div>
<!--
              PROJECT LOGO
            -->
<div>
<a href="https://jmeter.apache.org/"><img class="logo" src="../images/logo.svg" alt="Apache JMeter"></a>
</div>
<div class="banner">
<a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a>
<div class="clear"></div>
</div>
</div>
<div class="nav">
<ul class="menu">
<li onClick="return true">
<div class="menu-title">About</div>
<ul>
<li>
<a href="../index.html">Overview</a>
</li>
<li>
<a href="https://www.apache.org/licenses/">License</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Download</div>
<ul>
<li>
<a href="../download_jmeter.cgi">Download Releases</a>
</li>
<li>
<a href="../changes.html">Release Notes</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Documentation</div>
<ul>
<li>
<a href="../usermanual/get-started.html">Get Started</a>
</li>
<li>
<a href="../usermanual/index.html">User Manual</a>
</li>
<li>
<a href="../usermanual/best-practices.html">Best Practices</a>
</li>
<li>
<a href="../usermanual/component_reference.html">Component Reference</a>
</li>
<li>
<a href="../usermanual/functions.html">Functions Reference</a>
</li>
<li>
<a href="../usermanual/properties_reference.html">Properties Reference</a>
</li>
<li>
<a href="../changes_history.html">Change History</a>
</li>
<li>
<a href="../api/index.html">Javadocs</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ">FAQ (Wiki)</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Tutorials</div>
<ul>
<li>
<a href="../usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a>
</li>
<li>
<a href="../usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a>
</li>
<li>
<a href="../usermanual/junitsampler_tutorial.html">JUnit Sampler</a>
</li>
<li>
<a href="../usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a>
</li>
<li>
<a href="../usermanual/jmeter_tutorial.html">Extending JMeter</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Community</div>
<ul>
<li>
<a href="../issues.html">Issue Tracking</a>
</li>
<li>
<a href="https://www.apache.org/security/">Security</a>
</li>
<li>
<a href="../mail.html">Mailing Lists</a>
</li>
<li>
<a href="../svnindex.html">Source Repositories</a>
</li>
<li>
<a href="../building.html">Building and Contributing</a>
</li>
<li>
<a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterCommitters">Contributors</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Foundation</div>
<ul>
<li>
<a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>
</li>
<li>
<a href="https://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
</li>
<li>
<a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
</ul>
</li>
</ul>
</div>
<div class="main" id="content">
<div class="social-media">
<ul class="social-media-links">
<li class="twitter">
<a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a>
</li>
<li class="github">
<a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a>
</li>
</ul>
</div>
<ul class="pagelinks">
<li>
<a href="functions.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="hints_and_tips.html">Next &gt;</a>
</li>
</ul>
<div class="section">
<h1 id="regex">21. Regular Expressions<a class="sectionlink" href="#regex" title="Link to here">&para;</a>
</h1>

<div class="subsection">
<h2 id="overview">21.1 Overview<a class="sectionlink" href="#overview" title="Link to here">&para;</a>
</h2>

<p>
JMeter includes the pattern matching software <a href="http://attic.apache.org/projects/jakarta-oro.html">Apache Jakarta ORO</a>

<br>
There is some documentation for this on the Jakarta web-site, for example
<a href="http://archimedes.fas.harvard.edu/scrapbook/jakarta-oro-2.0.6/docs/api/org/apache/oro/text/regex/package-summary.html">
a summary of the pattern matching characters</a>

</p>

<p>
There is also documentation on an older incarnation of the product at
<a href="http://www.savarese.org/oro/docs/OROMatcher/index.html">OROMatcher User's guide</a>, which might prove useful.
</p>

<p>
The pattern matching is very similar to the pattern matching in Perl.
A full installation of Perl will include plenty of documentation on regular expressions - look for <span class="code">perlrequick</span>,
<span class="code">perlretut</span>, <span class="code">perlre</span> and <span class="code">perlreref</span>.
</p>

<p>
It is worth stressing the difference between "<em>contains</em>" and "<em>matches</em>", as used on the Response Assertion test element:
</p>

<dl>

<dt>"<em>contains</em>"</dt>
<dd> means that the regular expression matched at least some part of the target,
so '<span class="code">alphabet</span>' "<em>contains</em>" '<span class="code">ph.b.</span>' because the regular expression matches the substring '<span class="code">phabe</span>'.
</dd>

<dt>
"<em>matches</em>"</dt>
<dd> means that the regular expression matched the whole target.
So '<span class="code">alphabet</span>' is "<em>matched</em>" by '<span class="code">al.*t</span>'.
</dd>

</dl>

<p>In this case, it is equivalent to wrapping the regular expression in <span class="code">^</span> and <span class="code">$</span>, viz '<span class="code">^al.*t$</span>'.
</p>

<p>However, this is not always the case.
For example, the regular expression '<span class="code">alp|.lp.*</span>' is "<em>contained</em>" in '<span class="code">alphabet</span>',
but does not "<em>match</em>" '<span class="code">alphabet</span>'.
</p>

<p>Why? Because when the pattern matcher finds the sequence '<span class="code">alp</span>' in '<span class="code">alphabet</span>', it stops trying any other
combinations - and '<span class="code">alp</span>' is not the same as '<span class="code">alphabet</span>', as it does not include '<span class="code">habet</span>'.
</p>

<div class="clear"></div>
<div class="note">
Unlike Perl, there is no need to (i.e. do not) enclose the regular expression in <span class="code">//</span>.
</div>
<div class="clear"></div>

<p>
So how does one use the modifiers <span class="code">ismx</span> etc. if there is no trailing <span class="code">/</span>?
The solution is to use <i>extended regular expressions</i>, i.e. <span class="code">/abc/i</span> becomes <span class="code">(?i)abc</span>.
See also <a href="#placement">Placement of modifiers</a> below.
</p>

</div>

<div class="subsection">
<h2 id="examples">21.2 Examples<a class="sectionlink" href="#examples" title="Link to here">&para;</a>
</h2>

<h3>Extract single string</h3>

<p>
Suppose you want to match the following portion of a web-page:
<br>

<span class="code">name="file" value="readme.txt"&gt;</span>

<br>
and you want to extract <span class="code">readme.txt</span>.
<br>
A suitable regular expression would be:
<br>

<span class="code">name="file" value="(.+?)"&gt;</span>

<p>
The special characters above are:
</p>

<dl>

<dt>
<span class="code">(</span> and <span class="code">)</span>
</dt>
<dd>these enclose the portion of the match string to be returned</dd>

<dt>
<span class="code">.</span>
</dt>
<dd>match any character</dd>

<dt>
<span class="code">+</span>
</dt>
<dd>one or more times</dd>

<dt>
<span class="code">?</span>
</dt>
<dd>don't be greedy, i.e. stop when first match succeeds</dd>

</dl>

<p>
Note: without the <span class="code">?</span>, the <span class="code">.+</span> would continue past the first <span class="code">"&gt;</span>
until it found the last possible <span class="code">"&gt;</span> - which is probably not what was intended.
</p>

<p>
Note: although the above expression works, it's more efficient to use the following expression:
<br>

<span class="code">name="file" value="([^"]+)"&gt;</span>
where<br>

<span class="code">[^"]</span> - means match anything except <span class="code">"</span>
<br>
In this case, the matching engine can stop looking as soon as it sees the first <span class="code">"</span>,
whereas in the previous case the engine has to check that it has found <span class="code">"&gt;</span> rather than say <span class="code">" &gt;</span>.
</p>

<h3>Extract multiple strings</h3>

<p>
Suppose you want to match the following portion of a web-page:<br>

<span class="code">name="file.name" value="readme.txt"</span>
and you want to extract both <span class="code">file.name</span> and <span class="code">readme.txt</span>.
<br>
A suitable regular expression would be:
<br>

<span class="code">name="([^"]+)" value="([^"]+)"</span>

<br>
This would create 2 groups, which could be used in the JMeter Regular Expression Extractor template as <span class="code">$1$</span> and <span class="code">$2$</span>.
</p>

<p>
The JMeter Regex Extractor saves the values of the groups in additional variables.
</p>

<p>
For example, assume:
</p>

<ul>

<li>Reference Name: <span class="code">MYREF</span>
</li>

<li>Regex: <span class="code">name="(.+?)" value="(.+?)"</span>
</li>

<li>Template: <span class="code">$1$$2$</span>
</li>

</ul>

<div class="clear"></div>
<div class="note">Do not enclose the regular expression in <span class="code">/ /</span>
</div>
<div class="clear"></div>

<p>
The following variables would be set:
</p>

<dl>

<dt>
<span class="code">MYREF</span>
</dt>
<dd>
<span class="code">file.namereadme.txt</span>
</dd>

<dt>
<span class="code">MYREF_g0</span>
</dt>
<dd>
<span class="code">name="file.name" value="readme.txt"</span>
</dd>

<dt>
<span class="code">MYREF_g1</span>
</dt>
<dd>
<span class="code">file.name</span>
</dd>

<dt>
<span class="code">MYREF_g2</span>
</dt>
<dd>
<span class="code">readme.txt</span>
</dd>

</dl>
These variables can be referred to later on in the JMeter test plan, as <span class="code">${MYREF}</span>, <span class="code">${MYREF_g1}</span> etc.
</p>

</div>

<div class="subsection">
<h2 id="line_mode">21.3 Line mode<a class="sectionlink" href="#line_mode" title="Link to here">&para;</a>
</h2>

<p>The pattern matching behaves in various slightly different ways,
depending on the setting of the multi-line and single-line modifiers.
Note that the single-line and multi-line operators have nothing to do with each other;
they can be specified independently.
</p>

<h3>Single-line mode</h3>

<p>
Single-line mode only affects how the '<span class="code">.</span>' meta-character is interpreted.
</p>

<p>
Default behaviour is that '<span class="code">.</span>' matches any character except newline.
In single-line mode, '<span class="code">.</span>' also matches newline.
</p>


<h3>Multi-line mode</h3>

<p>
Multi-line mode only affects how the meta-characters '<span class="code">^</span>' and '<span class="code">$</span>' are interpreted.
</p>

<p>
Default behaviour is that '<span class="code">^</span>' and '<span class="code">$</span>' only match at the very beginning and end of the string.
When Multi-line mode is used, the '<span class="code">^</span>' metacharacter matches at the beginning of every line,
and the '<span class="code">$</span>' metacharacter matches at the end of every line.</p>


</div>


<div class="subsection">
<h2 id="meta_chars">21.4 Meta characters<a class="sectionlink" href="#meta_chars" title="Link to here">&para;</a>
</h2>

<p>
Regular expressions use certain characters as meta characters - these characters have a special meaning to the RE engine.
Such characters must be escaped by preceding them with <span class="code">\</span> (backslash) in order to treat them as ordinary characters.
Here is a list of the meta characters and their meaning (please check the ORO documentation if in doubt).
</p>

<dl>

<dt>
<span class="code">(</span> and <span class="code">)</span>
</dt>
<dd>grouping</dd>

<dt>
<span class="code">[</span> and <span class="code">]</span>
</dt>
<dd>character classes</dd>

<dt>
<span class="code">{</span> and <span class="code">}</span>
</dt>
<dd>repetition</dd>

<dt>
<span class="code">*</span>, <span class="code">+</span> and <span class="code">?</span>
</dt>
<dd>repetition</dd>

<dt>
<span class="code">.</span>
</dt>
<dd>wild-card character</dd>

<dt>
<span class="code">\</span>
</dt>
<dd>escape character</dd>

<dt>
<span class="code">|</span>
</dt>
<dd>alternatives</dd>

<dt>
<span class="code">^</span> and <span class="code">$</span>
</dt>
<dd>start and end of string or line</dd>

</dl>

<div class="clear"></div>
<div class="note">
Please note that ORO does not support the <span class="code">\Q</span> and <span class="code">\E</span> meta-characters.
[In other RE engines, these can be used to quote a portion of an RE so that the meta-characters stand for themselves.]
You can use function  to do the equivalent, see <a href="functions.html#__escapeOroRegexpChars">${__escapeOroRegexpChars(valueToEscape)}</a>.
</div>
<div class="clear"></div>

<p>
The following Perl5 extended regular expressions are supported by ORO.

<dl>

<dt>
<span class="code">(?#text)</span>
</dt>

<dd>An embedded comment causing text to be ignored.</dd>

<dt>
<span class="code">(?:regexp)</span>
</dt>

<dd>Groups things like "<span class="code">()</span>" but doesn't cause the group match to be saved.</dd>

<dt>
<span class="code">(?=regexp)</span>
</dt>

<dd>A zero-width positive lookahead assertion. For example, <span class="code">\w+(?=\s)</span> matches a word followed by whitespace, without including whitespace in the MatchResult.</dd>

<dt>
<span class="code">(?!regexp)</span>
</dt>

<dd>A zero-width negative lookahead assertion. For example <span class="code">foo(?!bar)</span> matches any occurrence of "<span class="code">foo</span>" that
isn't followed by "<span class="code">bar</span>". Remember that this is a zero-width assertion, which means that <span class="code">a(?!b)d</span> will
match <span class="code">ad</span> because <span class="code">a</span> is followed by a character that is not <span class="code">b</span> (the <span class="code">d</span>) and a <span class="code">d</span>
follows the zero-width assertion.</dd>

<dt>
<span class="code">(?imsx)</span>
</dt>

<dd>One or more embedded pattern-match modifiers. <span class="code">i</span> enables case insensitivity, <span class="code">m</span> enables multiline treatment
of the input, <span class="code">s</span> enables single line treatment of the input, and <span class="code">x</span> enables extended whitespace comments.</dd>

</dl>

<b>Note that <span class="code">(?&lt;=regexp)</span> - lookbehind - is not supported.</b>

</p>


</div>


<div class="subsection">
<h2 id="placement">21.5 Placement of modifiers<a class="sectionlink" href="#placement" title="Link to here">&para;</a>
</h2>

<p>
Modifiers can be placed anywhere in the regex, and apply from that point onwards.
[A bug in ORO means that they cannot be used at the very end of the regex.
However they would have no effect there anyway.]
</p>

<p>
The single-line <span class="code">(?s)</span> and multi-line <span class="code">(?m)</span> modifiers are normally placed at the start of the regex.
</p>

<p>
The ignore-case modifier <span class="code">(?i)</span> may be usefully applied to just part of a regex,
for example:</p>

<pre class="source">
Match ExAct case or (?i)ArBiTrARY(?-i) case
</pre>
would match <span class="code">Match ExAct case or arbitrary case</span> as well as <span class="code">Match ExAct case or ARBitrary case</span>, but not <span class="code">Match exact case or ArBiTrARY case</span>.
</div>

</div>
<div class="section">
<h1 id="testing_expressions">21.6 Testing Regular Expressions<a class="sectionlink" href="#testing_expressions" title="Link to here">&para;</a>
</h1>

<p>
Since JMeter 2.4, the listener <a href="component_reference.html#View_Results_Tree">View Results Tree</a>
include a RegExp Tester to test regular expressions directly on sampler response data.
</p>

<p>
There is a <a href="http://www.regexplanet.com/advanced/java/index.html">Website</a> to test Java Regular expressions.
</p>

<p>
Another approach is to use a simple test plan to test the regular expressions.
The Java Request sampler can be used to generate a sample, or the HTTP Sampler can be used to load a file.
Add a Debug Sampler and a Tree View Listener and changes to the regular expression can be tested quickly,
without needing to access any external servers.
</p>

</div>
<ul class="pagelinks">
<li>
<a href="functions.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="hints_and_tips.html">Next &gt;</a>
</li>
</ul>
<div class="share-links">
      Share this page:
      <ul>
<li class="fb">
<a data-social-url="https://facebook.com/sharer/sharer.php?u=" title="Share on facebook"><i class="fa fa-facebook" aria-hidden="true"></i>share</a>
</li>
<li class="twitter">
<a data-social-url="https://twitter.com/intent/tweet?url=" title="Tweet on twitter"><i class="fa fa-twitter" aria-hidden="true"></i>tweet</a>
</li>
</ul>
</div>
<a href="#top" id="topButton">Go to top</a>
</div>
<div class="footer">
<div class="copyright">
            Copyright &copy;
            1999 &ndash;
            2020
            , Apache Software Foundation
          </div>
<div class="trademarks">Apache, Apache JMeter, JMeter, the Apache
            feather, and the Apache JMeter logo are
            trademarks of the
            Apache Software Foundation.
          </div>
</div>
<script>(function(){
            "use strict";
            // enable 'go to top' button functionality
            document.addEventListener('scroll', function() {
                if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
                    document.getElementById("topButton").style.display = "block";
                } else {
                    document.getElementById("topButton").style.display = "none";
                }
            });
            // fill in the current location into social links on this page.
            var as = document.getElementsByTagName('a');
            var loc = document.location.href;
            if (!loc.toLowerCase().startsWith('http')) {
                return;
            }
            for (var i=0; i<as.length; i++) {
                var href = as[i].getAttribute('data-social-url');
                if (href !== null) {
                    as[i].href = href + encodeURIComponent(loc);
                }
            }
        })();</script>
</body>
</html>
