Regular Expressions 101

Save & Share

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

/
/
gm

Test String

Code Generator

Generated Code

#include <StringConstants.au3> ; to declare the Constants of StringRegExp #include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate Local $sRegex = "(?m)(<\s*[^>]*)(href=|src=)(.?)(\/[^\/])" Local $sString = "<div id="blog"><div id="content">" & @CRLF & _ " <div id="content">" & @CRLF & _ "" & @CRLF & _ " <div class="Article" data-slug="/blog/execution-traces-2024">" & @CRLF & _ " " & @CRLF & _ " <h1 class="small"><a href="//go.dev/blog/">The Go Blog</a></h1>" & @CRLF & _ " " & @CRLF & _ "" & @CRLF & _ " <h1>More powerful Go execution traces</h1>" & @CRLF & _ " " & @CRLF & _ " <p class="author">" & @CRLF & _ " Michael Knyszek<br>" & @CRLF & _ " 14 March 2024" & @CRLF & _ " </p>" & @CRLF & _ " " & @CRLF & _ " <p>The <a href="/pkg/runtime/trace">runtime/trace</a> package contains a powerful tool for understanding and" & @CRLF & _ "troubleshooting Go programs." & @CRLF & _ "The functionality within allows one to produce a trace of each goroutine&rsquo;s execution over some" & @CRLF & _ "time period." & @CRLF & _ "With the <a href="/pkg/cmd/trace"><code>go tool trace</code> command</a> (or the excellent open source" & @CRLF & _ "<a href="https://gotraceui.dev/" rel="noreferrer" target="_blank">gotraceui tool</a>), one may then visualize and explore the data within these" & @CRLF & _ "traces.</p>" & @CRLF & _ "<p>The magic of a trace is that it can easily reveal things about a program that are hard to see in" & @CRLF & _ "other ways." & @CRLF & _ "For example, a concurrency bottleneck where lots of goroutines block on the same channel might be" & @CRLF & _ "quite difficult to see in a CPU profile, because there&rsquo;s no execution to sample." & @CRLF & _ "But in an execution trace, the <em>lack</em> of execution will show up with amazing clarity, and the stack" & @CRLF & _ "traces of blocked goroutines will quickly point at the culprit.</p>" & @CRLF & _ "<div class="image">" & @CRLF & _ " <img src="execution-traces-2024/gotooltrace.png" alt="">" & @CRLF & _ "</div>" & @CRLF & _ "<p>Go developers are even able to instrument their own programs with <a href="//go.dev/pkg/runtime/trace#Task">tasks</a>," & @CRLF & _ "<a href="//go.dev/pkg/runtime/trace#WithRegion">regions</a>, and <a href="//go.dev/pkg/runtime/trace#Log">logs</a> that" & @CRLF & _ "they can use to correlate their higher-level concerns with lower-level execution details.</p>" & @CRLF & _ "<h2 id="issues">Issues</h2>" & @CRLF & _ "<p>Unfortunately, the wealth of information in execution traces can often be out of reach." & @CRLF & _ "Four big issues with traces have historically gotten in the way.</p>" & @CRLF & _ "<ul>" & @CRLF & _ "<li>Traces had high overheads.</li>" & @CRLF & _ "<li>Traces didn&rsquo;t scale well, and could become too big to analyze.</li>" & @CRLF & _ "<li>It was often unclear when to start tracing to capture a specific bad behavior.</li>" & @CRLF & _ "<li>Only the most adventurous gophers could programmatically analyze traces, given the lack of a" & @CRLF & _ "public package for parsing and interpreting execution traces.</li>" & @CRLF & _ "</ul>" & @CRLF & _ "<p>If you&rsquo;ve used traces in the last few years, you&rsquo;ve likely been frustrated by one or more of these" & @CRLF & _ "problems." & @CRLF & _ "But we&rsquo;re excited to share that over the last two Go releases we&rsquo;ve made big progress in all four" & @CRLF & _ "of these areas.</p>" & @CRLF & _ "<h2 id="low-overhead-tracing">Low-overhead tracing</h2>" & @CRLF & _ "<p>Prior to Go 1.21, the run-time overhead of tracing was somewhere between 10–20% CPU for many" & @CRLF & _ "applications, which limits tracing to situational usage, rather than continuous usage like CPU" & @CRLF & _ "profiling." & @CRLF & _ "It turned out that much of the cost of tracing came down to tracebacks." & @CRLF & _ "Many events produced by the runtime have stack traces attached, which are invaluable to actually" & @CRLF & _ "identifying what goroutines were doing at key moments in their execution.</p>" & @CRLF & _ "<p>Thanks to work by Felix Geisendörfer and Nick Ripley on optimizing the efficiency of tracebacks," & @CRLF & _ "the run-time CPU overhead of execution traces has been cut dramatically, down to 1–2% for many" & @CRLF & _ "applications." & @CRLF & _ "You can read more about the work done here in <a href="https://blog.felixge.de/reducing-gos-execution-tracer-overhead-with-frame-pointer-unwinding/" rel="noreferrer" target="_blank">Felix&rsquo;s great blog" & @CRLF & _ "post</a>" & @CRLF & _ "on the topic.</p>" & @CRLF & _ "<h2 id="scalable-traces">Scalable traces</h2>" & @CRLF & _ "<p>The trace format and its events were designed around relatively efficient emission, but required" & @CRLF & _ "tooling to parse and keep around the state of the entirety of a trace." & @CRLF & _ "A few hundred MiB trace could require several GiB of RAM to analyze!</p>" & @CRLF & _ "<p>This issue is unfortunately fundamental to how traces are generated." & @CRLF & _ "To keep run-time overheads low, all events are written to the equivalent of thread-local buffers." & @CRLF & _ "But this means events appear out of their true order, and the burden is placed on the trace" & @CRLF & _ "tooling to figure out what really happened.</p>" & @CRLF & _ "<p>The key insight to making traces scale while keeping overheads low was to occasionally split the" & @CRLF & _ "trace being generated." & @CRLF & _ "Each split point would behave a bit like simultaneously disabling and reenabling tracing in one" & @CRLF & _ "go." & @CRLF & _ "All the trace data so far would represent a complete and self-contained trace, while the new trace" & @CRLF & _ "data would seamlessly pick up from where it left off.</p>" & @CRLF & _ "<p>As you might imagine, fixing this required <a href="//go.dev/issue/60773">rethinking and rewriting a lot of the foundation of" & @CRLF & _ "the trace implementation</a> in the runtime." & @CRLF & _ "We&rsquo;re happy to say that the work landed in Go 1.22 and is now generally available." & @CRLF & _ "<a href="//go.dev/doc/go1.22#runtime/trace">A lot of nice improvements</a> came with the rewrite, including some" & @CRLF & _ "improvements to the <a href="//go.dev/doc/go1.22#trace"><code>go tool trace</code> command</a> as well." & @CRLF & _ "The gritty details are all in the <a href="https://github.com/golang/proposal/blob/master/design/60773-execution-tracer-overhaul.md" rel="noreferrer" target="_blank">design" & @CRLF & _ "document</a>," & @CRLF & _ "if you&rsquo;re curious.</p>" & @CRLF & _ "<p>(Note: <code>go tool trace</code> still loads the full trace into memory, but <a href="//go.dev/issue/65315">removing this" & @CRLF & _ "limitation</a> for traces produced by Go 1.22+ programs is now feasible.)</p>" & @CRLF & _ "<h2 id="flight-recording">Flight recording</h2>" & @CRLF & _ "<p>Suppose you work on a web service and an RPC took a very long time." & @CRLF & _ "You couldn&rsquo;t start tracing at the point you knew the RPC was already taking a while, because the" & @CRLF & _ "root cause of the slow request already happened and wasn&rsquo;t recorded.</p>" & @CRLF & _ "<p>There&rsquo;s a technique that can help with this called flight recording, which you may already be" & @CRLF & _ "familiar with from other programming environments." & @CRLF & _ "The insight with flight recording is to have tracing on continuously and always keep the most" & @CRLF & _ "recent trace data around, just in case." & @CRLF & _ "Then, once something interesting happens, the program can just write out whatever it has!</p>" & @CRLF & _ "<p>Before traces could be split, this was pretty much a non-starter." & @CRLF & _ "But because continuous tracing is now viable thanks to low overheads, and the fact that the runtime" & @CRLF & _ "can now split traces any time it needs, it turns out it was straightforward to implement flight" & @CRLF & _ "recording.</p>" & @CRLF & _ "<p>As a result, we&rsquo;re happy to announce a flight recorder experiment, available in the" & @CRLF & _ "<a href="//go.dev/pkg/golang.org/x/exp/trace#FlightRecorder">golang.org/x/exp/trace package</a>.</p>" & @CRLF & _ "<p>Please try it out!" & @CRLF & _ "Below is an example that sets up flight recording to capture a long HTTP request to get you started.</p>" & @CRLF & _ "<div class="code">" & @CRLF & _ "<pre> <span class="comment">// Set up the flight recorder.</span>" & @CRLF & _ " fr := trace.NewFlightRecorder()" & @CRLF & _ " fr.Start()" & @CRLF & _ "" & @CRLF & _ " <span class="comment">// Set up and run an HTTP server.</span>" & @CRLF & _ " var once sync.Once" & @CRLF & _ " http.HandleFunc(&#34;/my-endpoint&#34;, func(w http.ResponseWriter, r *http.Request) {" & @CRLF & _ " start := time.Now()" & @CRLF & _ "" & @CRLF & _ " <span class="comment">// Do the work...</span>" & @CRLF & _ " doWork(w, r)" & @CRLF & _ "" & @CRLF & _ " <span class="comment">// We saw a long request. Take a snapshot!</span>" & @CRLF & _ " if time.Since(start) &gt; 300*time.Millisecond {" & @CRLF & _ " <span class="comment">// Do it only once for simplicity, but you can take more than one.</span>" & @CRLF & _ " once.Do(func() {" & @CRLF & _ " <span class="comment">// Grab the snapshot.</span>" & @CRLF & _ " var b bytes.Buffer" & @CRLF & _ " _, err = fr.WriteTo(&amp;b)" & @CRLF & _ " if err != nil {" & @CRLF & _ " log.Print(err)" & @CRLF & _ " return" & @CRLF & _ " }" & @CRLF & _ " <span class="comment">// Write it to a file.</span>" & @CRLF & _ " if err := os.WriteFile(&#34;trace.out&#34;, b.Bytes(), 0o755); err != nil {" & @CRLF & _ " log.Print(err)" & @CRLF & _ " return" & @CRLF & _ " }" & @CRLF & _ " })" & @CRLF & _ " }" & @CRLF & _ " })" & @CRLF & _ " log.Fatal(http.ListenAndServe(&#34;:8080&#34;, nil))" & @CRLF & _ "</pre>" & @CRLF & _ "</div>" & @CRLF & _ "<p>If you have any feedback, positive or negative, please share it to the <a href="//go.dev/issue/63185">proposal" & @CRLF & _ "issue</a>!</p>" & @CRLF & _ "<h2 id="trace-reader-api">Trace reader API</h2>" & @CRLF & _ "<p>Along with the trace implementation rewrite came an effort to clean up the other trace internals," & @CRLF & _ "like <code>go tool trace</code>." & @CRLF & _ "This spawned an attempt to create a trace reader API that was good enough to share and that could" & @CRLF & _ "make traces more accessible.</p>" & @CRLF & _ "<p>Just like the flight recorder, we&rsquo;re happy to announce that we also have an experimental trace reader" & @CRLF & _ "API that we&rsquo;d like to share." & @CRLF & _ "It&rsquo;s available in the <a href="//go.dev/pkg/golang.org/x/exp/trace#Reader">same package as the flight recorder," & @CRLF & _ "golang.org/x/exp/trace</a>.</p>" & @CRLF & _ "<p>We think it&rsquo;s good enough to start building things on top of, so please try it out!" & @CRLF & _ "Below is an example that measures the proportion of goroutine block events that blocked to wait on" & @CRLF & _ "the network.</p>" & @CRLF & _ "<div class="code">" & @CRLF & _ "<pre> <span class="comment">// Start reading from STDIN.</span>" & @CRLF & _ " r, err := trace.NewReader(os.Stdin)" & @CRLF & _ " if err != nil {" & @CRLF & _ " log.Fatal(err)" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " var blocked int" & @CRLF & _ " var blockedOnNetwork int" & @CRLF & _ " for {" & @CRLF & _ " <span class="comment">// Read the event.</span>" & @CRLF & _ " ev, err := r.ReadEvent()" & @CRLF & _ " if err == io.EOF {" & @CRLF & _ " break" & @CRLF & _ " } else if err != nil {" & @CRLF & _ " log.Fatal(err)" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " <span class="comment">// Process it.</span>" & @CRLF & _ " if ev.Kind() == trace.EventStateTransition {" & @CRLF & _ " st := ev.StateTransition()" & @CRLF & _ " if st.Resource.Kind == trace.ResourceGoroutine {" & @CRLF & _ " from, to := st.Goroutine()" & @CRLF & _ "" & @CRLF & _ " <span class="comment">// Look for goroutines blocking, and count them.</span>" & @CRLF & _ " if from.Executing() &amp;&amp; to == trace.GoWaiting {" & @CRLF & _ " blocked++" & @CRLF & _ " if strings.Contains(st.Reason, &#34;network&#34;) {" & @CRLF & _ " blockedOnNetwork++" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ " <span class="comment">// Print what we found.</span>" & @CRLF & _ " p := 100 * float64(blockedOnNetwork) / float64(blocked)" & @CRLF & _ " fmt.Printf(&#34;%2.3f%% instances of goroutines blocking were to block on the network\n&#34;, p)" & @CRLF & _ "</pre>" & @CRLF & _ "</div>" & @CRLF & _ "<p>And just like the flight recorder, there&rsquo;s a <a href="//go.dev/issue/62627">proposal issue</a> that would" & @CRLF & _ "be a great place to leave feedback!</p>" & @CRLF & _ "<p>We&rsquo;d like to quickly call out Dominik Honnef as someone who tried it out early, provided great" & @CRLF & _ "feedback, and has contributed support for older trace versions to the API.</p>" & @CRLF & _ "<h2 id="thank-you">Thank you!</h2>" & @CRLF & _ "<p>This work was completed, in no small part, thanks to the help of the those in the <a href="//go.dev/issue/57175">diagnostics" & @CRLF & _ "working group</a>, started over a year ago as a collaboration between stakeholders from" & @CRLF & _ "across the Go community, and open to the public.</p>" & @CRLF & _ "<p>We&rsquo;d like to take a moment to thank those community members who have attended the diagnostic" & @CRLF & _ "meetings regularly over the last year: Felix Geisendörfer, Nick Ripley, Rhys Hiltner, Dominik" & @CRLF & _ "Honnef, Bryan Boreham, thepudds.</p>" & @CRLF & _ "<p>The discussions, feedback, and work you all put in have been instrumental to getting us to where we" & @CRLF & _ "are today." & @CRLF & _ "Thank you!</p>" & @CRLF & _ "" & @CRLF & _ " </div>" & @CRLF & _ "" & @CRLF & _ " " & @CRLF & _ " <div class="Article prevnext">" & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " <p>" & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " <b>Previous article: </b><a href="//go.dev/blog/generic-slice-functions">Robust generic functions on slices</a><br>" & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " <b><a href="//go.dev/blog/all">Blog Index</a></b>" & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " " & @CRLF & _ " </div>" & @CRLF & _ " " & @CRLF & _ "" & @CRLF & _ " </div>" & @CRLF & _ "</div>" & @CRLF & _ "" & @CRLF & _ "<script src="/js/jquery.js"></script>" & @CRLF & _ "<script src="/js/playground.js"></script>" & @CRLF & _ "<script src="/js/play.js"></script>" & @CRLF & _ "<script src="/js/godocs.js"></script>" Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH) Local $aFullArray[0] For $i = 0 To UBound($aArray) -1 _ArrayConcatenate($aFullArray, $aArray[$i]) Next $aArray = $aFullArray ; Present the entire match result _ArrayDisplay($aArray, "Result")

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 AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm