<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre, #msg p { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; }
#msg ul { overflow: auto; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<title>[28513] trunk/LayoutTests</title>
</head>
<body>

<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/28513">28513</a></dd>
<dt>Author</dt> <dd>ap@webkit.org</dd>
<dt>Date</dt> <dd>2007-12-06 23:02:16 -0800 (Thu, 06 Dec 2007)</dd>
</dl>

<h3>Log Message</h3>
<pre>        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16091
        JSCRE needs to import the PCRE test suite

        We can use two files from PCRE test suite, as others either test for features not supported
        in JS, or use internal debugging facilities of PCRE.

        The files are checked in almost unmodified, I have only converted them to UTF-8 and removed two
        huge test cases that were completely incompatible with JSC, and were polluting the output.

        Many of the failures in results are just legitimate differences in behavior or possibly
        problems with the test runner, but some may be genuine bugs and even regressions in JSC.

        * fast/regex: Added.
        * fast/regex/pcre-test-runner.js: Added.
        * fast/regex/test1-expected.txt: Added.
        * fast/regex/test1.html: Added.
        * fast/regex/test4-expected.txt: Added.
        * fast/regex/test4.html: Added.
        * fast/regex/testinput1: Added.
        * fast/regex/testinput4: Added.
        * fast/regex/testoutput1: Added.
        * fast/regex/testoutput4: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/LayoutTests/fast/regex/</li>
<li><a href="#trunkLayoutTestsfastregexpcretestrunnerjs">trunk/LayoutTests/fast/regex/pcre-test-runner.js</a></li>
<li><a href="#trunkLayoutTestsfastregextest1expectedtxt">trunk/LayoutTests/fast/regex/test1-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastregextest1html">trunk/LayoutTests/fast/regex/test1.html</a></li>
<li><a href="#trunkLayoutTestsfastregextest4expectedtxt">trunk/LayoutTests/fast/regex/test4-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastregextest4html">trunk/LayoutTests/fast/regex/test4.html</a></li>
<li><a href="#trunkLayoutTestsfastregextestinput1">trunk/LayoutTests/fast/regex/testinput1</a></li>
<li><a href="#trunkLayoutTestsfastregextestinput4">trunk/LayoutTests/fast/regex/testinput4</a></li>
<li><a href="#trunkLayoutTestsfastregextestoutput1">trunk/LayoutTests/fast/regex/testoutput1</a></li>
<li><a href="#trunkLayoutTestsfastregextestoutput4">trunk/LayoutTests/fast/regex/testoutput4</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (28512 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2007-12-07 06:17:55 UTC (rev 28512)
+++ trunk/LayoutTests/ChangeLog        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2007-12-06  Alexey Proskuryakov  &lt;ap@webkit.org&gt;
+
+        Reviewed by Darin.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16091
+        JSCRE needs to import the PCRE test suite
+
+        We can use two files from PCRE test suite, as others either test for features not supported
+        in JS, or use internal debugging facilities of PCRE.
+
+        The files are checked in almost unmodified, I have only converted them to UTF-8 and removed two
+        huge test cases that were completely incompatible with JSC, and were polluting the output.
+
+        Many of the failures in results are just legitimate differences in behavior or possibly
+        problems with the test runner, but some may be genuine bugs and even regressions in JSC.
+
+        * fast/regex: Added.
+        * fast/regex/pcre-test-runner.js: Added.
+        * fast/regex/test1-expected.txt: Added.
+        * fast/regex/test1.html: Added.
+        * fast/regex/test4-expected.txt: Added.
+        * fast/regex/test4.html: Added.
+        * fast/regex/testinput1: Added.
+        * fast/regex/testinput4: Added.
+        * fast/regex/testoutput1: Added.
+        * fast/regex/testoutput4: Added.
+
</ins><span class="cx"> 2007-12-06  Dan Bernstein  &lt;mitz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         - updated render tree results for r28483
</span></span></pre></div>
<a id="trunkLayoutTestsfastregexpcretestrunnerjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regex/pcre-test-runner.js (0 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regex/pcre-test-runner.js                                (rev 0)
+++ trunk/LayoutTests/fast/regex/pcre-test-runner.js        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -0,0 +1,140 @@
</span><ins>+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+var console_messages = null;
+
+function log(message)
+{
+    if (!console_messages) {
+        console_messages = document.createElement(&quot;pre&quot;);
+        document.body.appendChild(console_messages);
+    }
+    console_messages.appendChild(document.createTextNode(message + &quot;\n&quot;));
+}
+
+function fetchText(url) {
+    try {
+        var req = new XMLHttpRequest;
+        req.open(&quot;GET&quot;, url, false);
+        try {
+            req.overrideMimeType(&quot;text/plain; charset=utf-8&quot;);
+        } catch (ex) {
+        }
+        req.send();
+        return req.responseText;
+    } catch (ex) {
+        log (&quot;FAILED to read &quot; + url);
+    }
+}
+
+function replaceEscapes(str) {
+    var pos;
+    var endPos;
+    
+    // \x{41}
+    while ((pos = str.indexOf(&quot;\\x{&quot;)) != -1) {
+        endPos = pos + 1;
+        while (str[endPos] != &quot;}&quot;)
+            ++endPos;
+        var code = parseInt(str.substring(pos + 3, endPos), 16);
+        str = str.substr(0, pos) + String.fromCharCode(code) + str.substr(endPos + 1);
+    }
+
+    // \071
+    while ((pos = str.indexOf(&quot;\\0&quot;)) != -1) {
+        endPos = pos + 4;
+        var code = parseInt(str.substring(pos + 2, endPos), 8);
+        str = str.substr(0, pos) + String.fromCharCode(code) + str.substr(endPos);
+    }
+
+    // \x7f
+    while ((pos = str.indexOf(&quot;\\x&quot;)) != -1) {
+        endPos = pos + 4;
+        var code = parseInt(str.substring(pos + 2, endPos), 16);
+        str = str.substr(0, pos) + String.fromCharCode(code) + str.substr(endPos);
+    }
+
+    return str;
+}
+
+function runPCRETest(number, name) {
+    log(name + &quot;\n&quot;);
+
+    var inputText = fetchText(&quot;testinput&quot; + number);
+    var outputText = fetchText(&quot;testoutput&quot; + number);
+    
+    var tests = inputText.split(/\n[ \t]*\n/);
+    var results = outputText.split(/\n[ \t]*\n/);
+    if (tests.length != results.length)
+        log(&quot;Number of tests in input doesn't match output&quot;);
+    
+    var i, j;
+    for (i = 0 ; i &lt; tests.length - 1; ++i) { // -1  to account for &quot;End of ...&quot;
+        var testLines = tests[i].split(&quot;\n&quot;);
+        var resultLines = results[i].split(&quot;\n&quot;);
+
+        var linesInRegexp = 1;
+        var regexpText = testLines[0];
+        if (testLines[0].lastIndexOf(testLines[0][0]) == 0) {
+            do {
+                regexpText += &quot;\n&quot; + testLines[linesInRegexp];
+            } while (testLines[linesInRegexp++].indexOf(regexpText[0]) == -1)
+        }
+
+        log(regexpText);
+
+        regexpText = replaceEscapes(regexpText);
+        for (n = linesInRegexp; n &lt; testLines.length; ++n) {
+           testLines[n] = replaceEscapes(testLines[n]);
+        }
+        for (n = linesInRegexp; n &lt; resultLines.length; ++n) {
+           resultLines[n] = replaceEscapes(resultLines[n]);
+        }
+
+        var regexp = null;
+        try {
+            var reText = regexpText.match(new RegExp(&quot;^&quot; + testLines[0][0] + &quot;(.*)&quot; + testLines[0][0] + &quot;.*$&quot;))[1];
+            var reFlags = regexpText.match(new RegExp(&quot;^&quot; + testLines[0][0] + &quot;.*&quot; + testLines[0][0] + &quot;([^ \t]*)[ \t]*$&quot;))[1];
+            reFlags = reFlags.replace(&quot;8&quot;, &quot;&quot;); // No UTF-8 mode, we always work with Unicode.
+            if (!/^[gims]*$/.test(reFlags)) {
+                // Allowing &quot;s&quot; to better test newline handling, although it's unsupported in JavaScript.
+                log(&quot;Unsupported modifiers: &quot;+ reFlags + &quot;\n&quot;);
+                continue;
+            }
+            regexp = new RegExp(reText, reFlags);
+        } catch (ex) {
+        }
+        if (!regexp) {
+            log(&quot;FAILED TO COMPILE\n&quot;);
+            continue;
+        }
+        if (regexp.global) {
+            log(&quot;Global regex, cannot test matching via JS\n&quot;);
+            continue;
+        }
+
+        var resultsRow = linesInRegexp;
+        for (j = linesInRegexp; j &lt; testLines.length; ++j) {
+            var testLine = testLines[j];
+            var failersLine = (/\*\*\* Failers/.test(testLine));
+            var actualResults = regexp.exec(testLine.replace(/^    /, &quot;&quot;));
+            if (resultLines[resultsRow] != testLine)
+                log('Test results out of sync, &quot;' + resultLines[resultsRow] + '&quot; vs. &quot;' + testLine + '&quot;.');
+            ++resultsRow;
+            var expectedResults = null;
+            while (/ *[0-9]+: .*/.test(resultLines[resultsRow])) {
+                if (!expectedResults)
+                    expectedResults = [];
+                expectedResults[expectedResults.length] = resultLines[resultsRow++].replace(/ *[0-9]*: /, &quot;&quot;);
+            }
+            if (/^No match$/.test(resultLines[resultsRow]))
+                ++resultsRow;
+            if ((actualResults === null &amp;&amp; expectedResults === null) || (actualResults &amp;&amp; expectedResults &amp;&amp; actualResults.toString() == expectedResults.toString()))
+                log(testLine + (failersLine ? &quot;&quot; : &quot;: PASS&quot;));
+            else
+                log(testLine + ': FAIL. Actual results: &quot;' + actualResults + '&quot;');
+        }
+        log(&quot;&quot;);
+    }
+    log(&quot;DONE&quot;);
+}
</ins><span class="cx">Property changes on: trunk/LayoutTests/fast/regex/pcre-test-runner.js
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + text/javascript
</span><span class="cx">Name: svn:eol-style
</span><span class="cx">   + native
</span></span></pre></div>
<a id="trunkLayoutTestsfastregextest1expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regex/test1-expected.txt (0 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regex/test1-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/regex/test1-expected.txt        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -0,0 +1,2925 @@
</span><ins>+Test 1: main functionality.
+
+/the quick brown fox/
+    the quick brown fox: PASS
+    The quick brown FOX: PASS
+    What do you know about the quick brown fox?: PASS
+    What do you know about THE QUICK BROWN FOX?: PASS
+
+/The quick brown fox/i
+    the quick brown fox: PASS
+    The quick brown FOX: PASS
+    What do you know about the quick brown fox?: PASS
+    What do you know about THE QUICK BROWN FOX?: PASS
+
+/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
+    abcd\t\n\r\f\a\e9;\$\\?caxyz: FAIL. Actual results: &quot;null&quot;
+
+/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
+    abxyzpqrrrabbxyyyypqAzz: PASS
+    abxyzpqrrrabbxyyyypqAzz: PASS
+    aabxyzpqrrrabbxyyyypqAzz: PASS
+    aaabxyzpqrrrabbxyyyypqAzz: PASS
+    aaaabxyzpqrrrabbxyyyypqAzz: PASS
+    abcxyzpqrrrabbxyyyypqAzz: PASS
+    aabcxyzpqrrrabbxyyyypqAzz: PASS
+    aaabcxyzpqrrrabbxyyyypAzz: PASS
+    aaabcxyzpqrrrabbxyyyypqAzz: PASS
+    aaabcxyzpqrrrabbxyyyypqqAzz: PASS
+    aaabcxyzpqrrrabbxyyyypqqqAzz: PASS
+    aaabcxyzpqrrrabbxyyyypqqqqAzz: PASS
+    aaabcxyzpqrrrabbxyyyypqqqqqAzz: PASS
+    aaabcxyzpqrrrabbxyyyypqqqqqqAzz: PASS
+    aaaabcxyzpqrrrabbxyyyypqAzz: PASS
+    abxyzzpqrrrabbxyyyypqAzz: PASS
+    aabxyzzzpqrrrabbxyyyypqAzz: PASS
+    aaabxyzzzzpqrrrabbxyyyypqAzz: PASS
+    aaaabxyzzzzpqrrrabbxyyyypqAzz: PASS
+    abcxyzzpqrrrabbxyyyypqAzz: PASS
+    aabcxyzzzpqrrrabbxyyyypqAzz: PASS
+    aaabcxyzzzzpqrrrabbxyyyypqAzz: PASS
+    aaaabcxyzzzzpqrrrabbxyyyypqAzz: PASS
+    aaaabcxyzzzzpqrrrabbbxyyyypqAzz: PASS
+    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz: PASS
+    aaabcxyzpqrrrabbxyyyypABzz: PASS
+    aaabcxyzpqrrrabbxyyyypABBzz: PASS
+    &gt;&gt;&gt;aaabxyzpqrrrabbxyyyypqAzz: PASS
+    &gt;aaaabxyzpqrrrabbxyyyypqAzz: PASS
+    &gt;&gt;&gt;&gt;abcxyzpqrrrabbxyyyypqAzz: PASS
+    *** Failers
+    abxyzpqrrabbxyyyypqAzz: PASS
+    abxyzpqrrrrabbxyyyypqAzz: PASS
+    abxyzpqrrrabxyyyypqAzz: PASS
+    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz: PASS
+    aaaabcxyzzzzpqrrrabbbxyyypqAzz: PASS
+    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz: PASS
+
+/^(abc){1,2}zz/
+    abczz: PASS
+    abcabczz: PASS
+    *** Failers
+    zz: PASS
+    abcabcabczz: PASS
+    &gt;&gt;abczz: PASS
+
+/^(b+?|a){1,2}?c/
+    bc: PASS
+    bbc: PASS
+    bbbc: PASS
+    bac: PASS
+    bbac: PASS
+    aac: PASS
+    abbbbbbbbbbbc: PASS
+    bbbbbbbbbbbac: PASS
+    *** Failers
+    aaac: PASS
+    abbbbbbbbbbbac: PASS
+
+/^(b+|a){1,2}c/
+    bc: PASS
+    bbc: PASS
+    bbbc: PASS
+    bac: PASS
+    bbac: PASS
+    aac: PASS
+    abbbbbbbbbbbc: PASS
+    bbbbbbbbbbbac: PASS
+    *** Failers
+    aaac: PASS
+    abbbbbbbbbbbac: PASS
+
+/^(b+|a){1,2}?bc/
+    bbc: PASS
+
+/^(b*|ba){1,2}?bc/
+    babc: PASS
+    bbabc: PASS
+    bababc: PASS
+    *** Failers
+    bababbc: PASS
+    babababc: PASS
+
+/^(ba|b*){1,2}?bc/
+    babc: PASS
+    bbabc: PASS
+    bababc: PASS
+    *** Failers
+    bababbc: PASS
+    babababc: PASS
+
+/^\ca\cA\c[\c{\c:/
+    \e;z: FAIL. Actual results: &quot;null&quot;
+
+/^[ab\]cde]/
+    athing: PASS
+    bthing: PASS
+    ]thing: PASS
+    cthing: PASS
+    dthing: PASS
+    ething: PASS
+    *** Failers
+    fthing: PASS
+    [thing: PASS
+    \\thing: PASS
+
+/^[]cde]/
+    ]thing: FAIL. Actual results: &quot;null&quot;
+    cthing: FAIL. Actual results: &quot;null&quot;
+    dthing: FAIL. Actual results: &quot;null&quot;
+    ething: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    athing: PASS
+    fthing: PASS
+
+/^[^ab\]cde]/
+    fthing: PASS
+    [thing: PASS
+    \\thing: PASS
+    *** Failers
+    athing: PASS
+    bthing: PASS
+    ]thing: PASS
+    cthing: PASS
+    dthing: PASS
+    ething: PASS
+
+/^[^]cde]/
+    athing: FAIL. Actual results: &quot;null&quot;
+    fthing: FAIL. Actual results: &quot;null&quot;
+    *** Failers: FAIL. Actual results: &quot;null&quot;
+    ]thing: PASS
+    cthing: PASS
+    dthing: PASS
+    ething: PASS
+
+/^\/
+    : PASS
+
+/^ÿ/
+    ÿ: PASS
+
+/^[0-9]+$/
+    0: PASS
+    1: PASS
+    2: PASS
+    3: PASS
+    4: PASS
+    5: PASS
+    6: PASS
+    7: PASS
+    8: PASS
+    9: PASS
+    10: PASS
+    100: PASS
+    *** Failers
+    abc: PASS
+
+/^.*nter/
+    enter: PASS
+    inter: PASS
+    uponter: PASS
+
+/^xxx[0-9]+$/
+    xxx0: PASS
+    xxx1234: PASS
+    *** Failers
+    xxx: PASS
+
+/^.+[0-9][0-9][0-9]$/
+    x123: PASS
+    xx123: PASS
+    123456: PASS
+    *** Failers
+    123: PASS
+    x1234: PASS
+
+/^.+?[0-9][0-9][0-9]$/
+    x123: PASS
+    xx123: PASS
+    123456: PASS
+    *** Failers
+    123: PASS
+    x1234: PASS
+
+/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
+    abc!pqr=apquxz.ixr.zzz.ac.uk: PASS
+    *** Failers
+    !pqr=apquxz.ixr.zzz.ac.uk: PASS
+    abc!=apquxz.ixr.zzz.ac.uk: PASS
+    abc!pqr=apquxz:ixr.zzz.ac.uk: PASS
+    abc!pqr=apquxz.ixr.zzz.ac.ukk: PASS
+
+/:/
+    Well, we need a colon: somewhere: PASS
+    *** Fail if we don't: PASS
+
+/([\da-f:]+)$/i
+    0abc: PASS
+    abc: PASS
+    fed: PASS
+    E: PASS
+    ::: PASS
+    5f03:12C0::932e: PASS
+    fed def: PASS
+    Any old stuff: PASS
+    *** Failers
+    0zzz: PASS
+    gzzz: PASS
+    fed : PASS
+    Any old rubbish: PASS
+
+/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
+    .1.2.3: PASS
+    A.12.123.0: PASS
+    *** Failers
+    .1.2.3333: PASS
+    1.2.3: PASS
+    1234.2.3: PASS
+
+/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
+    1 IN SOA non-sp1 non-sp2(: PASS
+    1    IN    SOA    non-sp1    non-sp2   (: PASS
+    *** Failers
+    1IN SOA non-sp1 non-sp2(: PASS
+
+/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
+    a.: FAIL. Actual results: &quot;a.,&quot;
+    Z.: FAIL. Actual results: &quot;Z.,&quot;
+    2.: FAIL. Actual results: &quot;2.,&quot;
+    ab-c.pq-r.: PASS
+    sxk.zzz.ac.uk.: PASS
+    x-.y-.: PASS
+    *** Failers
+    -abc.peq.: PASS
+
+/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
+    *.a: FAIL. Actual results: &quot;*.a,,,&quot;
+    *.b0-a: FAIL. Actual results: &quot;*.b0-a,0-a,,&quot;
+    *.c3-b.c: FAIL. Actual results: &quot;*.c3-b.c,3-b,.c,&quot;
+    *.c-a.b-c: PASS
+    *** Failers
+    *.0: PASS
+    *.a-: PASS
+    *.a-b.c-: PASS
+    *.c-a.0-c: PASS
+
+/^(?=ab(de))(abd)(e)/
+    abde: PASS
+
+/^(?!(ab)de|x)(abd)(f)/
+    abdf: FAIL. Actual results: &quot;abdf,,abd,f&quot;
+
+/^(?=(ab(cd)))(ab)/
+    abcd: PASS
+
+/^[\da-f](\.[\da-f])*$/i
+    a.b.c.d: PASS
+    A.B.C.D: PASS
+    a.b.c.1.2.3.C: PASS
+
+/^\&quot;.*\&quot;\s*(;.*)?$/
+    \&quot;1234\&quot;: FAIL. Actual results: &quot;null&quot;
+    \&quot;abcd\&quot; ;: FAIL. Actual results: &quot;null&quot;
+    \&quot;\&quot; ; rhubarb: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    \&quot;1234\&quot; : things: PASS
+
+/^$/
+    \: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+
+/   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
+Unsupported modifiers: x
+
+/(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
+FAILED TO COMPILE
+
+/^   a\ b[c ]d       $/x
+Unsupported modifiers: x
+
+/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
+    abcdefhijklm: PASS
+
+/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
+    abcdefhijklm: PASS
+
+/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
+    a+ Z0+\n: FAIL. Actual results: &quot;null&quot;
+
+/^[.^$|()*+?{,}]+/
+    .^\$(*+)|{?,?}: FAIL. Actual results: &quot;.^&quot;
+
+/^a*\w/
+    z: PASS
+    az: PASS
+    aaaz: PASS
+    a: PASS
+    aa: PASS
+    aaaa: PASS
+    a+: PASS
+    aa+: PASS
+
+/^a*?\w/
+    z: PASS
+    az: PASS
+    aaaz: PASS
+    a: PASS
+    aa: PASS
+    aaaa: PASS
+    a+: PASS
+    aa+: PASS
+
+/^a+\w/
+    az: PASS
+    aaaz: PASS
+    aa: PASS
+    aaaa: PASS
+    aa+: PASS
+
+/^a+?\w/
+    az: PASS
+    aaaz: PASS
+    aa: PASS
+    aaaa: PASS
+    aa+: PASS
+
+/^\d{8}\w{2,}/
+    1234567890: PASS
+    12345678ab: PASS
+    12345678__: PASS
+    *** Failers
+    1234567: PASS
+
+/^[aeiou\d]{4,5}$/
+    uoie: PASS
+    1234: PASS
+    12345: PASS
+    aaaaa: PASS
+    *** Failers
+    123456: PASS
+
+/^[aeiou\d]{4,5}?/
+    uoie: PASS
+    1234: PASS
+    12345: PASS
+    aaaaa: PASS
+    123456: PASS
+
+/\A(abc|def)=(\1){2,3}\Z/
+    abc=abcabc: FAIL. Actual results: &quot;null&quot;
+    def=defdefdef: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    abc=defdef: PASS
+
+/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
+FAILED TO COMPILE
+
+/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
+    cataract cataract23: PASS
+    catatonic catatonic23: PASS
+    caterpillar caterpillar23: FAIL. Actual results: &quot;caterpillar caterpillar23,caterpillar,erpillar,,,3&quot;
+
+
+FAILED TO COMPILE
+
+/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
+    From abcd  Mon Sep 01 12:33:02 1997: PASS
+    From abcd  Mon Sep  1 12:33:02 1997: PASS
+    *** Failers
+    From abcd  Sep 01 12:33:02 1997: PASS
+
+/^12.34/s
+    12\n34: FAIL. Actual results: &quot;null&quot;
+    12\r34: FAIL. Actual results: &quot;null&quot;
+
+/\w+(?=\t)/
+    the quick brown\t fox: FAIL. Actual results: &quot;null&quot;
+
+/foo(?!bar)(.*)/
+    foobar is foolish see?: PASS
+
+/(?:(?!foo)...|^.{0,2})bar(.*)/
+    foobar crowbar etc: PASS
+    barrel: PASS
+    2barrel: PASS
+    A barrel: PASS
+
+/^(\D*)(?=\d)(?!123)/
+    abc456: PASS
+    *** Failers
+    abc123: PASS
+
+/^1234(?# test newlines
+  inside)/
+FAILED TO COMPILE
+
+/^1234 #comment in extended re
+  /x
+FAILED TO COMPILE
+
+/#rhubarb
+  abcd/x
+FAILED TO COMPILE
+
+/^abcd#rhubarb/x
+Unsupported modifiers: x
+
+/^(a)\1{2,3}(.)/
+    aaab: PASS
+    aaaab: PASS
+    aaaaab: PASS
+    aaaaaab: PASS
+
+/(?!^)abc/
+    the abc: PASS
+    *** Failers
+    abc: PASS
+
+/(?=^)abc/
+    abc: PASS
+    *** Failers
+    the abc: PASS
+
+/^[ab]{1,3}(ab*|b)/
+    aabbbbb: PASS
+
+/^[ab]{1,3}?(ab*|b)/
+    aabbbbb: PASS
+
+/^[ab]{1,3}?(ab*?|b)/
+    aabbbbb: PASS
+
+/^[ab]{1,3}(ab*?|b)/
+    aabbbbb: PASS
+
+/abc\0def\00pqr\000xyz\0000AB/
+    abcfqrxyz0AB: FAIL. Actual results: &quot;abcfqrxyz0AB&quot;
+    abc456 abcfqrxyz0ABCDE: FAIL. Actual results: &quot;abcfqrxyz0AB&quot;
+
+/abc\x0def\x00pqr\x000xyz\x0000AB/
+FAILED TO COMPILE
+
+/^[\000-\037]/
+    : PASS
+    : PASS
+    C: PASS
+
+/\0*/
+FAILED TO COMPILE
+
+/A\x0{2,3}Z/
+    The Ax0Z: FAIL. Actual results: &quot;null&quot;
+    An A0: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    A: PASS
+    A00Z: PASS
+
+/^(cow|)\1(bell)/
+    cowcowbell: PASS
+    bell: PASS
+    *** Failers
+    cowbell: PASS
+
+/^\s/
+     abc: PASS
+     abc: PASS
+    \nabc: FAIL. Actual results: &quot;null&quot;
+    \rabc: FAIL. Actual results: &quot;null&quot;
+    \tabc: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    abc: PASS
+
+/^a        b
+       c/x
+FAILED TO COMPILE
+
+/^(a|)\1*b/
+    ab: PASS
+    aaaab: PASS
+    b: PASS
+    *** Failers
+    acb: PASS
+
+/^(a|)\1+b/
+    aab: PASS
+    aaaab: PASS
+    b: PASS
+    *** Failers
+    ab: PASS
+
+/^(a|)\1?b/
+    ab: PASS
+    aab: PASS
+    b: PASS
+    *** Failers
+    acb: PASS
+
+/^(a|)\1{2}b/
+    aaab: PASS
+    b: PASS
+    *** Failers
+    ab: PASS
+    aab: PASS
+    aaaab: PASS
+
+/^(a|)\1{2,3}b/
+    aaab: PASS
+    aaaab: PASS
+    b: PASS
+    *** Failers
+    ab: PASS
+    aab: PASS
+    aaaaab: PASS
+
+/ab{1,3}bc/
+    abbbbc: PASS
+    abbbc: PASS
+    abbc: PASS
+    *** Failers
+    abc: PASS
+    abbbbbc: PASS
+
+/([^.]*)\.([^:]*):[T ]+(.*)/
+    track1.title:TBlah blah blah: PASS
+
+/([^.]*)\.([^:]*):[T ]+(.*)/i
+    track1.title:TBlah blah blah: PASS
+
+/([^.]*)\.([^:]*):[t ]+(.*)/i
+    track1.title:TBlah blah blah: PASS
+
+/^[W-c]+$/
+    WXY_^abc: PASS
+    *** Failers
+    wxy: PASS
+
+/^[W-c]+$/i
+    WXY_^abc: PASS
+    wxy_^ABC: PASS
+
+/^[\x3f-\x5F]+$/i
+    WXY_^abc: PASS
+    wxy_^ABC: PASS
+
+/^abc$/m
+    abc: PASS
+    qqq\nabc: FAIL. Actual results: &quot;null&quot;
+    abc\nzzz: FAIL. Actual results: &quot;null&quot;
+    qqq\nabc\nzzz: FAIL. Actual results: &quot;null&quot;
+
+/^abc$/
+    abc: PASS
+    *** Failers
+    qqq\nabc: PASS
+    abc\nzzz: PASS
+    qqq\nabc\nzzz: PASS
+
+/\Aabc\Z/m
+    abc: FAIL. Actual results: &quot;null&quot;
+    abc\n : FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    qqq\nabc: PASS
+    abc\nzzz: PASS
+    qqq\nabc\nzzz: PASS
+
+/\A(.)*\Z/s
+    abc\ndef: FAIL. Actual results: &quot;null&quot;
+
+/\A(.)*\Z/m
+    *** Failers: FAIL. Actual results: &quot;null&quot;
+    abc\ndef: PASS
+
+/(?:b)|(?::+)/
+    b::c: PASS
+    c::b: PASS
+
+/[-az]+/
+    az-: PASS
+    *** Failers
+    b: PASS
+
+/[az-]+/
+    za-: PASS
+    *** Failers
+    b: PASS
+
+/[a\-z]+/
+    a-z: PASS
+    *** Failers
+    b: PASS
+
+/[a-z]+/
+    abcdxyz: PASS
+
+/[\d-]+/
+    12-34: PASS
+    *** Failers
+    aaa: PASS
+
+/[\d-z]+/
+    12-34z: PASS
+    *** Failers
+    aaa: PASS
+
+/\x5c/
+FAILED TO COMPILE
+
+/\x20Z/
+    the Zoo: PASS
+    *** Failers
+    Zulu: PASS
+
+/(abc)\1/i
+    abcabc: PASS
+    ABCabc: PASS
+    abcABC: PASS
+
+/ab{3cd/
+    ab{3cd: PASS
+
+/ab{3,cd/
+    ab{3,cd: PASS
+
+/ab{3,4a}cd/
+    ab{3,4a}cd: PASS
+
+/{4,5a}bc/
+    {4,5a}bc: PASS
+
+/abc$/
+    abc: PASS
+    abc\n: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    abc\ndef: PASS
+
+/(abc)\123/
+    abcS: PASS
+
+/(abc)\223/
+    abc“: PASS
+
+/(abc)\323/
+    abcÓ: PASS
+
+/(abc)\100/
+    abc@: PASS
+    abc\100: FAIL. Actual results: &quot;null&quot;
+
+/(abc)\1000/
+    abc@0: PASS
+    abc@0: PASS
+    abc\1000: FAIL. Actual results: &quot;null&quot;
+    abc\1000: FAIL. Actual results: &quot;null&quot;
+    abc\1000: FAIL. Actual results: &quot;null&quot;
+    abc\100\60: FAIL. Actual results: &quot;null&quot;
+
+/abc\81/
+    abc: FAIL. Actual results: &quot;null&quot;
+    abc381: FAIL. Actual results: &quot;null&quot;
+
+/abc\91/
+    abc: FAIL. Actual results: &quot;null&quot;
+    abc391: FAIL. Actual results: &quot;null&quot;
+
+/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
+    abcdefghijkllS: PASS
+
+/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
+    abcdefghijk\12S: FAIL. Actual results: &quot;null&quot;
+
+/ab\idef/
+    abidef: PASS
+
+/a{0}bc/
+    bc: PASS
+
+/(a|(bc)){0,0}?xyz/
+    xyz: FAIL. Actual results: &quot;xyz,,&quot;
+
+/abc[\10]de/
+    abcde: PASS
+
+/abc[\1]de/
+    abc\1de: FAIL. Actual results: &quot;null&quot;
+
+/(abc)[\1]de/
+    abc\1de: FAIL. Actual results: &quot;null&quot;
+
+/(?s)a.b/
+FAILED TO COMPILE
+
+/^([^a])([^\b])([^c]*)([^d]{3,4})/
+    baNOTccccd: PASS
+    baNOTcccd: PASS
+    baNOTccd: PASS
+    bacccd: PASS
+    *** Failers
+    anything: PASS
+    b\bc   : FAIL. Actual results: &quot;b\bc   ,b,\,b,c   &quot;
+    baccd: PASS
+
+/[^a]/
+    Abc: PASS
+
+/[^a]/i
+    Abc : PASS
+
+/[^a]+/
+    AAAaAbc: PASS
+
+/[^a]+/i
+    AAAaAbc : FAIL. Actual results: &quot;bc &quot;
+
+/[^a]+/
+    bbb\nccc: FAIL. Actual results: &quot;bbb\nccc&quot;
+
+/[^k]$/
+    abc: PASS
+    *** Failers
+    abk   : FAIL. Actual results: &quot; &quot;
+
+/[^k]{2,3}$/
+    abc: PASS
+    kbc: PASS
+    kabc : FAIL. Actual results: &quot;bc &quot;
+    *** Failers
+    abk: PASS
+    akb: PASS
+    akk : PASS
+
+/^\d{8,}\@.+[^k]$/
+    12345678\@a.b.c.d: FAIL. Actual results: &quot;null&quot;
+    123456789\@x.y.z: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    12345678\@x.y.uk: PASS
+    1234567\@a.b.c.d       : PASS
+
+/(a)\1{8,}/
+    aaaaaaaaa: PASS
+    aaaaaaaaaa: PASS
+    *** Failers
+    aaaaaaa   : PASS
+
+/[^a]/
+    aaaabcd: PASS
+    aaAabcd : PASS
+
+/[^a]/i
+    aaaabcd: PASS
+    aaAabcd : PASS
+
+/[^az]/
+    aaaabcd: PASS
+    aaAabcd : PASS
+
+/[^az]/i
+    aaaabcd: PASS
+    aaAabcd : PASS
+
+/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366
 \367\370\371\372\373\374\375\376\377/
+FAILED TO COMPILE
+
+/P[^*]TAIRE[^*]{1,6}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx: PASS
+
+/P[^*]TAIRE[^*]{1,}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx: PASS
+
+/(\.\d\d[1-9]?)\d+/
+    1.230003938: PASS
+    1.875000282   : PASS
+    1.235  : PASS
+
+/(\.\d\d((?=0)|\d(?=\d)))/
+    1.230003938      : PASS
+    1.875000282: PASS
+    *** Failers 
+    1.235 : PASS
+
+/a(?)b/
+FAILED TO COMPILE
+
+/\b(foo)\s+(\w+)/i
+    Food is on the foo table: PASS
+
+/foo(.*)bar/
+    The food is under the bar in the barn.: PASS
+
+/foo(.*?)bar/  
+    The food is under the bar in the barn.: PASS
+
+/(.*)(\d*)/
+    I have 2 numbers: 53147: PASS
+
+/(.*)(\d+)/
+    I have 2 numbers: 53147: PASS
+
+/(.*?)(\d*)/
+    I have 2 numbers: 53147: PASS
+
+/(.*?)(\d+)/
+    I have 2 numbers: 53147: PASS
+
+/(.*)(\d+)$/
+    I have 2 numbers: 53147: PASS
+
+/(.*?)(\d+)$/
+    I have 2 numbers: 53147: PASS
+
+/(.*)\b(\d+)$/
+    I have 2 numbers: 53147: PASS
+
+/(.*\D)(\d+)$/
+    I have 2 numbers: 53147: PASS
+
+/^\D*(?!123)/
+    ABC123: PASS
+
+/^(\D*)(?=\d)(?!123)/
+    ABC445: PASS
+    *** Failers
+    ABC123: PASS
+
+/^[W-]46]/
+    W46]789 : PASS
+    -46]789: PASS
+    *** Failers
+    Wall: PASS
+    Zebra: PASS
+    42: PASS
+    [abcd] : PASS
+    ]abcd[: PASS
+
+/^[W-\]46]/
+    W46]789 : PASS
+    Wall: PASS
+    Zebra: PASS
+    Xylophone  : PASS
+    42: PASS
+    [abcd] : PASS
+    ]abcd[: PASS
+    \\backslash : PASS
+    *** Failers
+    -46]789: PASS
+    well: PASS
+
+/\d\d\/\d\d\/\d\d\d\d/
+    01/01/2000: PASS
+
+/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark otherword: PASS
+  word cat dog elephant mussel cow horse canary baboon snake shark: PASS
+
+/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope: PASS
+
+/^(a){0,0}/
+    bcd: FAIL. Actual results: &quot;,&quot;
+    abc: FAIL. Actual results: &quot;,&quot;
+    aab     : FAIL. Actual results: &quot;,&quot;
+
+/^(a){0,1}/
+    bcd: FAIL. Actual results: &quot;,&quot;
+    abc: PASS
+    aab  : PASS
+
+/^(a){0,2}/
+    bcd: FAIL. Actual results: &quot;,&quot;
+    abc: PASS
+    aab  : PASS
+
+/^(a){0,3}/
+    bcd: FAIL. Actual results: &quot;,&quot;
+    abc: PASS
+    aab: PASS
+    aaa   : PASS
+
+/^(a){0,}/
+    bcd: FAIL. Actual results: &quot;,&quot;
+    abc: PASS
+    aab: PASS
+    aaa: PASS
+    aaaaaaaa    : PASS
+
+/^(a){1,1}/
+    bcd: PASS
+    abc: PASS
+    aab  : PASS
+
+/^(a){1,2}/
+    bcd: PASS
+    abc: PASS
+    aab  : PASS
+
+/^(a){1,3}/
+    bcd: PASS
+    abc: PASS
+    aab: PASS
+    aaa   : PASS
+
+/^(a){1,}/
+    bcd: PASS
+    abc: PASS
+    aab: PASS
+    aaa: PASS
+    aaaaaaaa    : PASS
+
+/.*\.gif/
+    borfle\nbib.gif\nno: FAIL. Actual results: &quot;borfle\nbib.gif&quot;
+
+/.{0,}\.gif/
+    borfle\nbib.gif\nno: FAIL. Actual results: &quot;borfle\nbib.gif&quot;
+
+/.*\.gif/m
+    borfle\nbib.gif\nno: FAIL. Actual results: &quot;borfle\nbib.gif&quot;
+
+/.*\.gif/s
+    borfle\nbib.gif\nno: FAIL. Actual results: &quot;borfle\nbib.gif&quot;
+
+/.*\.gif/ms
+    borfle\nbib.gif\nno: FAIL. Actual results: &quot;borfle\nbib.gif&quot;
+
+/.*$/
+    borfle\nbib.gif\nno: FAIL. Actual results: &quot;borfle\nbib.gif\nno&quot;
+
+/.*$/m
+    borfle\nbib.gif\nno: FAIL. Actual results: &quot;borfle\nbib.gif\nno&quot;
+
+/.*$/s
+    borfle\nbib.gif\nno: FAIL. Actual results: &quot;borfle\nbib.gif\nno&quot;
+
+/.*$/ms
+    borfle\nbib.gif\nno: FAIL. Actual results: &quot;borfle\nbib.gif\nno&quot;
+
+/.*$/
+    borfle\nbib.gif\nno\n: FAIL. Actual results: &quot;borfle\nbib.gif\nno\n&quot;
+
+/.*$/m
+    borfle\nbib.gif\nno\n: FAIL. Actual results: &quot;borfle\nbib.gif\nno\n&quot;
+
+/.*$/s
+    borfle\nbib.gif\nno\n: FAIL. Actual results: &quot;borfle\nbib.gif\nno\n&quot;
+
+/.*$/ms
+    borfle\nbib.gif\nno\n: FAIL. Actual results: &quot;borfle\nbib.gif\nno\n&quot;
+
+/(.*X|^B)/
+    abcde\n1234Xyz: FAIL. Actual results: &quot;abcde\n1234X,abcde\n1234X&quot;
+    BarFoo : PASS
+    *** Failers
+    abcde\nBar  : PASS
+
+/(.*X|^B)/m
+    abcde\n1234Xyz: FAIL. Actual results: &quot;abcde\n1234X,abcde\n1234X&quot;
+    BarFoo : PASS
+    abcde\nBar  : FAIL. Actual results: &quot;null&quot;
+
+/(.*X|^B)/s
+    abcde\n1234Xyz: FAIL. Actual results: &quot;abcde\n1234X,abcde\n1234X&quot;
+    BarFoo : PASS
+    *** Failers
+    abcde\nBar  : PASS
+
+/(.*X|^B)/ms
+    abcde\n1234Xyz: FAIL. Actual results: &quot;abcde\n1234X,abcde\n1234X&quot;
+    BarFoo : PASS
+    abcde\nBar  : FAIL. Actual results: &quot;null&quot;
+
+/(?s)(.*X|^B)/
+FAILED TO COMPILE
+
+/(?s:.*X|^B)/
+FAILED TO COMPILE
+
+/^.*B/
+    **** Failers
+    abc\nB: FAIL. Actual results: &quot;abc\nB&quot;
+
+/(?s)^.*B/
+FAILED TO COMPILE
+
+/(?m)^.*B/
+FAILED TO COMPILE
+
+/(?ms)^.*B/
+FAILED TO COMPILE
+
+/(?ms)^B/
+FAILED TO COMPILE
+
+/(?s)B$/
+FAILED TO COMPILE
+
+/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
+    123456654321: PASS
+
+/^\d\d\d\d\d\d\d\d\d\d\d\d/
+    123456654321 : PASS
+
+/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
+    123456654321: PASS
+
+/^[abc]{12}/
+    abcabcabcabc: PASS
+
+/^[a-c]{12}/
+    abcabcabcabc: PASS
+
+/^(a|b|c){12}/
+    abcabcabcabc : PASS
+
+/^[abcdefghijklmnopqrstuvwxy0123456789]/
+    n: PASS
+    *** Failers 
+    z : PASS
+
+/abcde{0,0}/
+    abcd: PASS
+    *** Failers
+    abce  : PASS
+
+/ab[cd]{0,0}e/
+    abe: PASS
+    *** Failers
+    abcde : PASS
+
+/ab(c){0,0}d/
+    abd: FAIL. Actual results: &quot;abd,&quot;
+    *** Failers
+    abcd   : PASS
+
+/a(b*)/
+    a: PASS
+    ab: PASS
+    abbbb: PASS
+    *** Failers
+    bbbbb    : PASS
+
+/ab\d{0}e/
+    abe: PASS
+    *** Failers
+    ab1e   : PASS
+
+/&quot;([^\\&quot;]+|\\.)*&quot;/
+    the \&quot;quick\&quot; brown fox: FAIL. Actual results: &quot;null&quot;
+    \&quot;the \\\&quot;quick\\\&quot; brown fox\&quot; : FAIL. Actual results: &quot;null&quot;
+
+/.*?/g+
+Unsupported modifiers: g+
+
+/\b/g+
+Unsupported modifiers: g+
+
+/\b/+g
+Unsupported modifiers: +g
+
+//g
+Global regex, cannot test matching via JS
+
+/&lt;tr([\w\W\s\d][^&lt;&gt;]{0,})&gt;&lt;TD([\w\W\s\d][^&lt;&gt;]{0,})&gt;([\d]{0,}\.)(.*)((&lt;BR&gt;([\w\W\s\d][^&lt;&gt;]{0,})|[\s]{0,}))&lt;\/a&gt;&lt;\/TD&gt;&lt;TD([\w\W\s\d][^&lt;&gt;]{0,})&gt;([\w\W\s\d][^&lt;&gt;]{0,})&lt;\/TD&gt;&lt;TD([\w\W\s\d][^&lt;&gt;]{0,})&gt;([\w\W\s\d][^&lt;&gt;]{0,})&lt;\/TD&gt;&lt;\/TR&gt;/is
+  &lt;TR BGCOLOR='#DBE9E9'&gt;&lt;TD align=left valign=top&gt;43.&lt;a href='joblist.cfm?JobID=94 6735&amp;Keyword='&gt;Word Processor&lt;BR&gt;(N-1286)&lt;/a&gt;&lt;/TD&gt;&lt;TD align=left valign=top&gt;Lega lstaff.com&lt;/TD&gt;&lt;TD align=left valign=top&gt;CA - Statewide&lt;/TD&gt;&lt;/TR&gt;: FAIL. Actual results: &quot;&lt;TR BGCOLOR='#DBE9E9'&gt;&lt;TD align=left valign=top&gt;43.&lt;a href='joblist.cfm?JobID=94 6735&amp;Keyword='&gt;Word Processor&lt;BR&gt;(N-1286)&lt;/a&gt;&lt;/TD&gt;&lt;TD align=left valign=top&gt;Lega lstaff.com&lt;/TD&gt;&lt;TD align=left valign=top&gt;CA - Statewide&lt;/TD&gt;&lt;/TR&gt;, BGCOLOR='#DBE9E9', align=left valign=top,43.,&lt;a href='joblist.cfm?JobID=94 6735&amp;Keyword='&gt;Word Processor&lt;BR&gt;(N-1286),,,, align=left valign=top,Lega lstaff.com, align=left valign=top,CA - Statewide&quot;
+
+/a[^a]b/
+    acb: PASS
+    a\nb: FAIL. Actual results: &quot;null&quot;
+
+/a.b/
+    acb: PASS
+    *** Failers 
+    a\nb   : PASS
+
+/a[^a]b/s
+    acb: PASS
+    a\nb  : FAIL. Actual results: &quot;null&quot;
+
+/a.b/s
+    acb: PASS
+    a\nb  : FAIL. Actual results: &quot;null&quot;
+
+/^(b+?|a){1,2}?c/
+    bac: PASS
+    bbac: PASS
+    bbbac: PASS
+    bbbbac: PASS
+    bbbbbac : PASS
+
+/^(b+|a){1,2}?c/
+    bac: PASS
+    bbac: PASS
+    bbbac: PASS
+    bbbbac: PASS
+    bbbbbac : PASS
+
+/(?!\A)x/m
+    x\nb\n: FAIL. Actual results: &quot;x&quot;
+    a\bx\n  : PASS
+
+/\x0{ab}/
+    b} : FAIL. Actual results: &quot;null&quot;
+
+/(A|B)*?CD/
+    CD : FAIL. Actual results: &quot;CD,&quot;
+
+/(A|B)*CD/
+    CD : FAIL. Actual results: &quot;CD,&quot;
+
+/(AB)*?\1/
+    ABABAB: FAIL. Actual results: &quot;,&quot;
+
+/(AB)*\1/
+    ABABAB: PASS
+
+/(?&lt;!bar)foo/
+FAILED TO COMPILE
+
+/\w{3}(?&lt;!bar)foo/
+FAILED TO COMPILE
+
+/(?&lt;=(foo)a)bar/
+FAILED TO COMPILE
+
+/\Aabc\z/m
+    abc: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    abc\n   : PASS
+    qqq\nabc: PASS
+    abc\nzzz: PASS
+    qqq\nabc\nzzz: PASS
+
+&quot;(?&gt;.*/)foo&quot;
+FAILED TO COMPILE
+
+&quot;(?&gt;.*/)foo&quot;
+FAILED TO COMPILE
+
+/(?&gt;(\.\d\d[1-9]?))\d+/
+FAILED TO COMPILE
+
+/^((?&gt;\w+)|(?&gt;\s+))*$/
+FAILED TO COMPILE
+
+/(\d+)(\w)/
+    12345a: PASS
+    12345+ : PASS
+
+/((?&gt;\d+))(\w)/
+FAILED TO COMPILE
+
+/(?&gt;a+)b/
+FAILED TO COMPILE
+
+/((?&gt;a+)b)/
+FAILED TO COMPILE
+
+/(?&gt;(a+))b/
+FAILED TO COMPILE
+
+/(?&gt;b)+/
+FAILED TO COMPILE
+
+/(?&gt;a+|b+|c+)*c/
+FAILED TO COMPILE
+
+/((?&gt;[^()]+)|\([^()]*\))+/
+FAILED TO COMPILE
+
+/\(((?&gt;[^()]+)|\([^()]+\))+\)/ 
+FAILED TO COMPILE
+
+/a(?-i)b/i
+FAILED TO COMPILE
+
+/(a (?x)b c)d e/
+FAILED TO COMPILE
+
+/(a b(?x)c d (?-x)e f)/
+FAILED TO COMPILE
+
+/(a(?i)b)c/
+FAILED TO COMPILE
+
+/a(?i:b)c/
+FAILED TO COMPILE
+
+/a(?i:b)*c/
+FAILED TO COMPILE
+
+/a(?=b(?i)c)\w\wd/
+FAILED TO COMPILE
+
+/(?s-i:more.*than).*million/i
+FAILED TO COMPILE
+
+/(?:(?s-i)more.*than).*million/i
+FAILED TO COMPILE
+
+/(?&gt;a(?i)b+)+c/ 
+FAILED TO COMPILE
+
+/(?=a(?i)b)\w\wc/
+FAILED TO COMPILE
+
+/(?&lt;=a(?i)b)(\w\w)c/
+FAILED TO COMPILE
+
+/(?:(a)|b)(?(1)A|B)/
+FAILED TO COMPILE
+
+/^(a)?(?(1)a|b)+$/
+FAILED TO COMPILE
+
+/^(?(?=abc)\w{3}:|\d\d)$/
+FAILED TO COMPILE
+
+/^(?(?!abc)\d\d|\w{3}:)$/
+FAILED TO COMPILE
+
+/(?(?&lt;=foo)bar|cat)/
+FAILED TO COMPILE
+
+/(?(?&lt;!foo)cat|bar)/
+FAILED TO COMPILE
+
+/( \( )? [^()]+ (?(1) \) |) /x
+Unsupported modifiers: x
+
+/( \( )? [^()]+ (?(1) \) ) /x
+Unsupported modifiers: x
+
+/^(?(2)a|(1)(2))+$/
+FAILED TO COMPILE
+
+/((?i)blah)\s+\1/
+FAILED TO COMPILE
+
+/((?i)blah)\s+(?i:\1)/
+FAILED TO COMPILE
+
+/(?&gt;a*)*/
+FAILED TO COMPILE
+
+/(abc|)+/
+    abc: FAIL. Actual results: &quot;null&quot;
+    abcabc: FAIL. Actual results: &quot;null&quot;
+    abcabcabc: FAIL. Actual results: &quot;null&quot;
+    xyz      : FAIL. Actual results: &quot;null&quot;
+
+/([a]*)*/
+    a: FAIL. Actual results: &quot;null&quot;
+    aaaaa : FAIL. Actual results: &quot;null&quot;
+
+/([ab]*)*/
+    a: FAIL. Actual results: &quot;null&quot;
+    b: FAIL. Actual results: &quot;null&quot;
+    ababab: FAIL. Actual results: &quot;null&quot;
+    aaaabcde: FAIL. Actual results: &quot;null&quot;
+    bbbb    : FAIL. Actual results: &quot;null&quot;
+
+/([^a]*)*/
+    b: FAIL. Actual results: &quot;null&quot;
+    bbbb: FAIL. Actual results: &quot;null&quot;
+    aaa   : FAIL. Actual results: &quot;null&quot;
+
+/([^ab]*)*/
+    cccc: FAIL. Actual results: &quot;null&quot;
+    abab  : FAIL. Actual results: &quot;null&quot;
+
+/([a]*?)*/
+    a: FAIL. Actual results: &quot;null&quot;
+    aaaa : FAIL. Actual results: &quot;null&quot;
+
+/([ab]*?)*/
+    a: FAIL. Actual results: &quot;null&quot;
+    b: FAIL. Actual results: &quot;null&quot;
+    abab: FAIL. Actual results: &quot;null&quot;
+    baba   : FAIL. Actual results: &quot;null&quot;
+
+/([^a]*?)*/
+    b: FAIL. Actual results: &quot;null&quot;
+    bbbb: FAIL. Actual results: &quot;null&quot;
+    aaa   : FAIL. Actual results: &quot;null&quot;
+
+/([^ab]*?)*/
+    c: FAIL. Actual results: &quot;null&quot;
+    cccc: FAIL. Actual results: &quot;null&quot;
+    baba   : FAIL. Actual results: &quot;null&quot;
+
+/(?&gt;a*)*/
+FAILED TO COMPILE
+
+/((?&gt;a*))*/
+FAILED TO COMPILE
+
+/((?&gt;a*?))*/
+FAILED TO COMPILE
+
+/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
+Unsupported modifiers: x
+
+/(?&lt;=(foo))bar\1/
+FAILED TO COMPILE
+
+/(?i:saturday|sunday)/
+FAILED TO COMPILE
+
+/(a(?i)bc|BB)x/
+FAILED TO COMPILE
+
+/^([ab](?i)[cd]|[ef])/
+FAILED TO COMPILE
+
+/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
+FAILED TO COMPILE
+
+/(?&lt;=foo\n)^bar/m
+FAILED TO COMPILE
+
+/(?&lt;=(?&lt;!foo)bar)baz/
+FAILED TO COMPILE
+
+/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
+/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/: PASS
+/where it does set $1 to aa when matching aaaaaa./: PASS
+
+/^(a\1?){4}$/
+    a: PASS
+    aa: PASS
+    aaa: PASS
+    aaaa: PASS
+    aaaaa: PASS
+    aaaaaaa: PASS
+    aaaaaaaa: PASS
+    aaaaaaaaa: PASS
+    aaaaaaaaaa: PASS
+    aaaaaaaaaaa: PASS
+    aaaaaaaaaaaa: PASS
+    aaaaaaaaaaaaa: PASS
+    aaaaaaaaaaaaaa: PASS
+    aaaaaaaaaaaaaaa: PASS
+    aaaaaaaaaaaaaaaa               : PASS
+
+/^(a\1?)(a\1?)(a\2?)(a\3?)$/
+    a: PASS
+    aa: PASS
+    aaa: PASS
+    aaaa: PASS
+    aaaaa: PASS
+    aaaaaa: PASS
+    aaaaaaa: PASS
+    aaaaaaaa: PASS
+    aaaaaaaaa: PASS
+    aaaaaaaaaa: PASS
+    aaaaaaaaaaa: PASS
+    aaaaaaaaaaaa: PASS
+    aaaaaaaaaaaaa: PASS
+    aaaaaaaaaaaaaa: PASS
+    aaaaaaaaaaaaaaa: PASS
+    aaaaaaaaaaaaaaaa               : PASS
+
+/The following tests are taken from the Perl 5.005 test suite; some of them/
+/are compatible with 5.004, but I'd rather not have to sort them out./: PASS
+
+/abc/
+    abc: PASS
+    xabcy: PASS
+    ababc: PASS
+    *** Failers
+    xbc: PASS
+    axc: PASS
+    abx: PASS
+
+/ab*c/
+    abc: PASS
+
+/ab*bc/
+    abc: PASS
+    abbc: PASS
+    abbbbc: PASS
+
+/.{1}/
+    abbbbc: PASS
+
+/.{3,4}/
+    abbbbc: PASS
+
+/ab{0,}bc/
+    abbbbc: PASS
+
+/ab+bc/
+    abbc: PASS
+    *** Failers
+    abc: PASS
+    abq: PASS
+
+/ab{1,}bc/
+
+/ab+bc/
+    abbbbc: PASS
+
+/ab{1,}bc/
+    abbbbc: PASS
+
+/ab{1,3}bc/
+    abbbbc: PASS
+
+/ab{3,4}bc/
+    abbbbc: PASS
+
+/ab{4,5}bc/
+    *** Failers
+    abq: PASS
+    abbbbc: PASS
+
+/ab?bc/
+    abbc: PASS
+    abc: PASS
+
+/ab{0,1}bc/
+    abc: PASS
+
+/ab?bc/
+
+/ab?c/
+    abc: PASS
+
+/ab{0,1}c/
+    abc: PASS
+
+/^abc$/
+    abc: PASS
+    *** Failers
+    abbbbc: PASS
+    abcc: PASS
+
+/^abc/
+    abcc: PASS
+
+/^abc$/
+
+/abc$/
+    aabc: PASS
+    *** Failers
+    aabc: PASS
+    aabcd: PASS
+
+/^/
+    abc: PASS
+
+/$/
+    abc: PASS
+
+/a.c/
+    abc: PASS
+    axc: PASS
+
+/a.*c/
+    axyzc: PASS
+
+/a[bc]d/
+    abd: PASS
+    *** Failers
+    axyzd: PASS
+    abc: PASS
+
+/a[b-d]e/
+    ace: PASS
+
+/a[b-d]/
+    aac: PASS
+
+/a[-b]/
+    a-: PASS
+
+/a[b-]/
+    a-: PASS
+
+/a]/
+    a]: PASS
+
+/a[]]b/
+    a]b: FAIL. Actual results: &quot;null&quot;
+
+/a[^bc]d/
+    aed: PASS
+    *** Failers
+    abd: PASS
+    abd: PASS
+
+/a[^-b]c/
+    adc: PASS
+
+/a[^]b]c/
+    adc: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    a-c: FAIL. Actual results: &quot;null&quot;
+    a]c: PASS
+
+/\ba\b/
+    a-: PASS
+    -a: PASS
+    -a-: PASS
+
+/\by\b/
+    *** Failers
+    xy: PASS
+    yz: PASS
+    xyz: PASS
+
+/\Ba\B/
+    *** Failers
+    a-: PASS
+    -a: PASS
+    -a-: PASS
+
+/\By\b/
+    xy: PASS
+
+/\by\B/
+    yz: PASS
+
+/\By\B/
+    xyz: PASS
+
+/\w/
+    a: PASS
+
+/\W/
+    -: PASS
+    *** Failers
+    -: PASS
+    a: PASS
+
+/a\sb/
+    a b: PASS
+
+/a\Sb/
+    a-b: PASS
+    *** Failers
+    a-b: PASS
+    a b: PASS
+
+/\d/
+    1: PASS
+
+/\D/
+    -: PASS
+    *** Failers
+    -: PASS
+    1: PASS
+
+/[\w]/
+    a: PASS
+
+/[\W]/
+    -: PASS
+    *** Failers
+    -: PASS
+    a: PASS
+
+/a[\s]b/
+    a b: PASS
+
+/a[\S]b/
+    a-b: PASS
+    *** Failers
+    a-b: PASS
+    a b: PASS
+
+/[\d]/
+    1: PASS
+
+/[\D]/
+    -: PASS
+    *** Failers
+    -: PASS
+    1: PASS
+
+/ab|cd/
+    abc: PASS
+    abcd: PASS
+
+/()ef/
+    def: PASS
+
+/$b/
+
+/a\(b/
+    a(b: PASS
+
+/a\(*b/
+    ab: PASS
+    a((b: PASS
+
+/a\\b/
+    a\b: FAIL. Actual results: &quot;a\b&quot;
+
+/((a))/
+    abc: PASS
+
+/(a)b(c)/
+    abc: PASS
+
+/a+b+c/
+    aabbabc: PASS
+
+/a{1,}b{1,}c/
+    aabbabc: PASS
+
+/a.+?c/
+    abcabc: PASS
+
+/(a+|b)*/
+    ab: PASS
+
+/(a+|b){0,}/
+    ab: PASS
+
+/(a+|b)+/
+    ab: PASS
+
+/(a+|b){1,}/
+    ab: PASS
+
+/(a+|b)?/
+    ab: PASS
+
+/(a+|b){0,1}/
+    ab: PASS
+
+/[^ab]*/
+    cde: PASS
+
+/abc/
+    *** Failers
+    b: PASS
+
+
+FAILED TO COMPILE
+
+
+FAILED TO COMPILE
+
+/([abc])*bcd/
+    abcd: PASS
+
+/a|b|c|d|e/
+    e: PASS
+
+/(a|b|c|d|e)f/
+    ef: PASS
+
+/abcd*efg/
+    abcdefg: PASS
+
+/ab*/
+    xabyabbbz: PASS
+    xayabbbz: PASS
+
+/(ab|cd)e/
+    abcde: PASS
+
+/[abhgefdc]ij/
+    hij: PASS
+
+/^(ab|cd)e/
+
+/(abc|)ef/
+    abcdef: PASS
+
+/(a|b)c*d/
+    abcd: PASS
+
+/(ab|ab*)bc/
+    abc: PASS
+
+/a([bc]*)c*/
+    abc: PASS
+
+/a([bc]*)(c*d)/
+    abcd: PASS
+
+/a([bc]+)(c*d)/
+    abcd: PASS
+
+/a([bc]*)(c+d)/
+    abcd: PASS
+
+/a[bcd]*dcdcde/
+    adcdcde: PASS
+
+/a[bcd]+dcdcde/
+    *** Failers
+    abcde: PASS
+    adcdcde: PASS
+
+/(ab|a)b*c/
+    abc: PASS
+
+/((a)(b)c)(d)/
+    abcd: PASS
+
+/[a-zA-Z_][a-zA-Z0-9_]*/
+    alpha: PASS
+
+/^a(bc+|b[eh])g|.h$/
+    abh: FAIL. Actual results: &quot;bh,&quot;
+
+/(bc+d$|ef*g.|h?i(j|k))/
+    effgz: FAIL. Actual results: &quot;effgz,effgz,&quot;
+    ij: PASS
+    reffgz: FAIL. Actual results: &quot;effgz,effgz,&quot;
+    *** Failers
+    effg: PASS
+    bcdd: PASS
+
+/((((((((((a))))))))))/
+    a: PASS
+
+/((((((((((a))))))))))\10/
+    aa: PASS
+
+/(((((((((a)))))))))/
+    a: PASS
+
+/multiple words of text/
+    *** Failers
+    aa: PASS
+    uh-uh: PASS
+
+/multiple words/
+    multiple words, yeah: PASS
+
+/(.*)c(.*)/
+    abcde: PASS
+
+/\((.*), (.*)\)/
+    (a, b): PASS
+
+/[k]/
+
+/abcd/
+    abcd: PASS
+
+/a(bc)d/
+    abcd: PASS
+
+/a[-]?c/
+    ac: PASS
+
+/(abc)\1/
+    abcabc: PASS
+
+/([a-c]*)\1/
+    abcabc: PASS
+
+/(a)|\1/
+    a: PASS
+    *** Failers: FAIL. Actual results: &quot;,&quot;
+    ab: PASS
+    x: FAIL. Actual results: &quot;,&quot;
+
+/(([a-c])b*?\2)*/
+    ababbbcbc: PASS
+
+/(([a-c])b*?\2){3}/
+    ababbbcbc: PASS
+
+/((\3|b)\2(a)x)+/
+    aaaxabaxbaaxbbax: PASS
+
+/((\3|b)\2(a)){2,}/
+    bbaababbabaaaaabbaaaabba: FAIL. Actual results: &quot;null&quot;
+
+/abc/i
+    ABC: PASS
+    XABCY: PASS
+    ABABC: PASS
+    *** Failers
+    aaxabxbaxbbx: PASS
+    XBC: PASS
+    AXC: PASS
+    ABX: PASS
+
+/ab*c/i
+    ABC: PASS
+
+/ab*bc/i
+    ABC: PASS
+    ABBC: PASS
+
+/ab*?bc/i
+    ABBBBC: PASS
+
+/ab{0,}?bc/i
+    ABBBBC: PASS
+
+/ab+?bc/i
+    ABBC: PASS
+
+/ab+bc/i
+    *** Failers
+    ABC: PASS
+    ABQ: PASS
+
+/ab{1,}bc/i
+
+/ab+bc/i
+    ABBBBC: PASS
+
+/ab{1,}?bc/i
+    ABBBBC: PASS
+
+/ab{1,3}?bc/i
+    ABBBBC: PASS
+
+/ab{3,4}?bc/i
+    ABBBBC: PASS
+
+/ab{4,5}?bc/i
+    *** Failers
+    ABQ: PASS
+    ABBBBC: PASS
+
+/ab??bc/i
+    ABBC: PASS
+    ABC: PASS
+
+/ab{0,1}?bc/i
+    ABC: PASS
+
+/ab??bc/i
+
+/ab??c/i
+    ABC: PASS
+
+/ab{0,1}?c/i
+    ABC: PASS
+
+/^abc$/i
+    ABC: PASS
+    *** Failers
+    ABBBBC: PASS
+    ABCC: PASS
+
+/^abc/i
+    ABCC: PASS
+
+/^abc$/i
+
+/abc$/i
+    AABC: PASS
+
+/^/i
+    ABC: PASS
+
+/$/i
+    ABC: PASS
+
+/a.c/i
+    ABC: PASS
+    AXC: PASS
+
+/a.*?c/i
+    AXYZC: PASS
+
+/a.*c/i
+    *** Failers
+    AABC: PASS
+    AXYZD: PASS
+
+/a[bc]d/i
+    ABD: PASS
+
+/a[b-d]e/i
+    ACE: PASS
+    *** Failers
+    ABC: PASS
+    ABD: PASS
+
+/a[b-d]/i
+    AAC: PASS
+
+/a[-b]/i
+    A-: PASS
+
+/a[b-]/i
+    A-: PASS
+
+/a]/i
+    A]: PASS
+
+/a[]]b/i
+    A]B: FAIL. Actual results: &quot;null&quot;
+
+/a[^bc]d/i
+    AED: PASS
+
+/a[^-b]c/i
+    ADC: PASS
+    *** Failers
+    ABD: PASS
+    A-C: PASS
+
+/a[^]b]c/i
+    ADC: FAIL. Actual results: &quot;null&quot;
+
+/ab|cd/i
+    ABC: PASS
+    ABCD: PASS
+
+/()ef/i
+    DEF: PASS
+
+/$b/i
+    *** Failers
+    A]C: PASS
+    B: PASS
+
+/a\(b/i
+    A(B: PASS
+
+/a\(*b/i
+    AB: PASS
+    A((B: PASS
+
+/a\\b/i
+    A\B: FAIL. Actual results: &quot;A\B&quot;
+
+/((a))/i
+    ABC: PASS
+
+/(a)b(c)/i
+    ABC: PASS
+
+/a+b+c/i
+    AABBABC: PASS
+
+/a{1,}b{1,}c/i
+    AABBABC: PASS
+
+/a.+?c/i
+    ABCABC: PASS
+
+/a.*?c/i
+    ABCABC: PASS
+
+/a.{0,5}?c/i
+    ABCABC: PASS
+
+/(a+|b)*/i
+    AB: PASS
+
+/(a+|b){0,}/i
+    AB: PASS
+
+/(a+|b)+/i
+    AB: PASS
+
+/(a+|b){1,}/i
+    AB: PASS
+
+/(a+|b)?/i
+    AB: PASS
+
+/(a+|b){0,1}/i
+    AB: PASS
+
+/(a+|b){0,1}?/i
+    AB: FAIL. Actual results: &quot;,&quot;
+
+/[^ab]*/i
+    CDE: PASS
+
+/abc/i
+
+/a*/i
+
+
+FAILED TO COMPILE
+
+/([abc])*bcd/i
+    ABCD: PASS
+
+/a|b|c|d|e/i
+    E: PASS
+
+/(a|b|c|d|e)f/i
+    EF: PASS
+
+/abcd*efg/i
+    ABCDEFG: PASS
+
+/ab*/i
+    XABYABBBZ: PASS
+    XAYABBBZ: PASS
+
+/(ab|cd)e/i
+    ABCDE: PASS
+
+/[abhgefdc]ij/i
+    HIJ: PASS
+
+/^(ab|cd)e/i
+    ABCDE: PASS
+
+/(abc|)ef/i
+    ABCDEF: PASS
+
+/(a|b)c*d/i
+    ABCD: PASS
+
+/(ab|ab*)bc/i
+    ABC: PASS
+
+/a([bc]*)c*/i
+    ABC: PASS
+
+/a([bc]*)(c*d)/i
+    ABCD: PASS
+
+/a([bc]+)(c*d)/i
+    ABCD: PASS
+
+/a([bc]*)(c+d)/i
+    ABCD: PASS
+
+/a[bcd]*dcdcde/i
+    ADCDCDE: PASS
+
+/a[bcd]+dcdcde/i
+
+/(ab|a)b*c/i
+    ABC: PASS
+
+/((a)(b)c)(d)/i
+    ABCD: PASS
+
+/[a-zA-Z_][a-zA-Z0-9_]*/i
+    ALPHA: PASS
+
+/^a(bc+|b[eh])g|.h$/i
+    ABH: FAIL. Actual results: &quot;BH,&quot;
+
+/(bc+d$|ef*g.|h?i(j|k))/i
+    EFFGZ: FAIL. Actual results: &quot;EFFGZ,EFFGZ,&quot;
+    IJ: PASS
+    REFFGZ: FAIL. Actual results: &quot;EFFGZ,EFFGZ,&quot;
+    *** Failers
+    ADCDCDE: PASS
+    EFFG: PASS
+    BCDD: PASS
+
+/((((((((((a))))))))))/i
+    A: PASS
+
+/((((((((((a))))))))))\10/i
+    AA: PASS
+
+/(((((((((a)))))))))/i
+    A: PASS
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
+    A: PASS
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
+    C: PASS
+
+/multiple words of text/i
+    *** Failers
+    AA: PASS
+    UH-UH: PASS
+
+/multiple words/i
+    MULTIPLE WORDS, YEAH: PASS
+
+/(.*)c(.*)/i
+    ABCDE: PASS
+
+/\((.*), (.*)\)/i
+    (A, B): PASS
+
+/[k]/i
+
+/abcd/i
+    ABCD: PASS
+
+/a(bc)d/i
+    ABCD: PASS
+
+/a[-]?c/i
+    AC: PASS
+
+/(abc)\1/i
+    ABCABC: PASS
+
+/([a-c]*)\1/i
+    ABCABC: PASS
+
+/a(?!b)./
+    abad: PASS
+
+/a(?=d)./
+    abad: PASS
+
+/a(?=c|d)./
+    abad: PASS
+
+/a(?:b|c|d)(.)/
+    ace: PASS
+
+/a(?:b|c|d)*(.)/
+    ace: PASS
+
+/a(?:b|c|d)+?(.)/
+    ace: PASS
+    acdbcdbe: PASS
+
+/a(?:b|c|d)+(.)/
+    acdbcdbe: PASS
+
+/a(?:b|c|d){2}(.)/
+    acdbcdbe: PASS
+
+/a(?:b|c|d){4,5}(.)/
+    acdbcdbe: PASS
+
+/a(?:b|c|d){4,5}?(.)/
+    acdbcdbe: PASS
+
+/((foo)|(bar))*/
+    foobar: PASS
+
+/a(?:b|c|d){6,7}(.)/
+    acdbcdbe: PASS
+
+/a(?:b|c|d){6,7}?(.)/
+    acdbcdbe: PASS
+
+/a(?:b|c|d){5,6}(.)/
+    acdbcdbe: PASS
+
+/a(?:b|c|d){5,6}?(.)/
+    acdbcdbe: PASS
+
+/a(?:b|c|d){5,7}(.)/
+    acdbcdbe: PASS
+
+/a(?:b|c|d){5,7}?(.)/
+    acdbcdbe: PASS
+
+/a(?:b|(c|e){1,2}?|d)+?(.)/
+    ace: PASS
+
+/^(.+)?B/
+    AB: PASS
+
+/^([^a-z])|(\^)$/
+    .: FAIL. Actual results: &quot;.,.,&quot;
+
+/^[&lt;&gt;]&amp;/
+    &lt;&amp;OUT: PASS
+
+/^(a\1?){4}$/
+    aaaaaaaaaa: PASS
+    *** Failers
+    AB: PASS
+    aaaaaaaaa: PASS
+    aaaaaaaaaaa: PASS
+
+/^(a(?(1)\1)){4}$/
+FAILED TO COMPILE
+
+/(?:(f)(o)(o)|(b)(a)(r))*/
+    foobar: PASS
+
+/(?&lt;=a)b/
+FAILED TO COMPILE
+
+/(?&lt;!c)b/
+FAILED TO COMPILE
+
+/(?:..)*a/
+    aba: PASS
+
+/(?:..)*?a/
+    aba: PASS
+
+/^(?:b|a(?=(.)))*\1/
+    abc: PASS
+
+/^(){3,5}/
+    abc: PASS
+
+/^(a+)*ax/
+    aax: PASS
+
+/^((a|b)+)*ax/
+    aax: PASS
+
+/^((a|bc)+)*ax/
+    aax: PASS
+
+/(a|x)*ab/
+    cab: FAIL. Actual results: &quot;ab,&quot;
+
+/(a)*ab/
+    cab: FAIL. Actual results: &quot;ab,&quot;
+
+/(?:(?i)a)b/
+FAILED TO COMPILE
+
+/((?i)a)b/
+FAILED TO COMPILE
+
+/(?:(?i)a)b/
+FAILED TO COMPILE
+
+/((?i)a)b/
+FAILED TO COMPILE
+
+/(?:(?i)a)b/
+FAILED TO COMPILE
+
+/((?i)a)b/
+FAILED TO COMPILE
+
+/(?i:a)b/
+FAILED TO COMPILE
+
+/((?i:a))b/
+FAILED TO COMPILE
+
+/(?i:a)b/
+FAILED TO COMPILE
+
+/((?i:a))b/
+FAILED TO COMPILE
+
+/(?i:a)b/
+FAILED TO COMPILE
+
+/((?i:a))b/
+FAILED TO COMPILE
+
+/(?:(?-i)a)b/i
+FAILED TO COMPILE
+
+/((?-i)a)b/i
+FAILED TO COMPILE
+
+/(?:(?-i)a)b/i
+FAILED TO COMPILE
+
+/((?-i)a)b/i
+FAILED TO COMPILE
+
+/(?:(?-i)a)b/i
+FAILED TO COMPILE
+
+/((?-i)a)b/i
+FAILED TO COMPILE
+
+/(?:(?-i)a)b/i
+FAILED TO COMPILE
+
+/((?-i)a)b/i
+FAILED TO COMPILE
+
+/(?:(?-i)a)b/i
+FAILED TO COMPILE
+
+/((?-i)a)b/i
+FAILED TO COMPILE
+
+/(?-i:a)b/i
+FAILED TO COMPILE
+
+/((?-i:a))b/i
+FAILED TO COMPILE
+
+/(?-i:a)b/i
+FAILED TO COMPILE
+
+/((?-i:a))b/i
+FAILED TO COMPILE
+
+/(?-i:a)b/i
+FAILED TO COMPILE
+
+/((?-i:a))b/i
+FAILED TO COMPILE
+
+/(?-i:a)b/i
+FAILED TO COMPILE
+
+/((?-i:a))b/i
+FAILED TO COMPILE
+
+/(?-i:a)b/i
+FAILED TO COMPILE
+
+/((?-i:a))b/i
+FAILED TO COMPILE
+
+/((?-i:a.))b/i
+FAILED TO COMPILE
+
+/((?s-i:a.))b/i
+FAILED TO COMPILE
+
+/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
+    cabbbb: PASS
+
+/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
+    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb: PASS
+
+/(ab)\d\1/i
+    Ab4ab: PASS
+    ab4Ab: PASS
+
+/foo\w*\d{4}baz/
+    foobar1234baz: PASS
+
+/x(~~)*(?:(?:F)?)?/
+    x~~: PASS
+
+/^a(?#xxx){3}c/
+FAILED TO COMPILE
+
+/^a (?#xxx) (?#yyy) {3}c/x
+Unsupported modifiers: x
+
+/(?&lt;![cd])b/
+FAILED TO COMPILE
+
+/(?&lt;![cd])[ab]/
+FAILED TO COMPILE
+
+/(?&lt;!(c|d))b/
+FAILED TO COMPILE
+
+/(?&lt;!(c|d))[ab]/
+FAILED TO COMPILE
+
+/(?&lt;!cd)[ab]/
+FAILED TO COMPILE
+
+/^(?:a?b?)*$/
+    \: FAIL. Actual results: &quot;null&quot;
+    a: FAIL. Actual results: &quot;null&quot;
+    ab: FAIL. Actual results: &quot;null&quot;
+    aaa   : FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    dbcb: PASS
+    a--: PASS
+    aa-- : PASS
+
+/((?s)^a(.))((?m)^b$)/
+FAILED TO COMPILE
+
+/((?m)^b$)/
+FAILED TO COMPILE
+
+/(?m)^b/
+FAILED TO COMPILE
+
+/(?m)^(b)/
+FAILED TO COMPILE
+
+/((?m)^b)/
+FAILED TO COMPILE
+
+/\n((?m)^b)/
+FAILED TO COMPILE
+
+/((?s).)c(?!.)/
+FAILED TO COMPILE
+
+/((?s)b.)c(?!.)/
+FAILED TO COMPILE
+
+/^b/
+
+/()^b/
+    *** Failers
+    a\nb\nc\n: PASS
+    a\nb\nc\n: PASS
+
+/((?m)^b)/
+FAILED TO COMPILE
+
+/(?(1)a|b)/
+FAILED TO COMPILE
+
+/(?(1)b|a)/
+FAILED TO COMPILE
+
+/(x)?(?(1)a|b)/
+FAILED TO COMPILE
+
+/(x)?(?(1)b|a)/
+FAILED TO COMPILE
+
+/()?(?(1)b|a)/
+FAILED TO COMPILE
+
+/()(?(1)b|a)/
+FAILED TO COMPILE
+
+/()?(?(1)a|b)/
+FAILED TO COMPILE
+
+/^(\()?blah(?(1)(\)))$/
+FAILED TO COMPILE
+
+/^(\(+)?blah(?(1)(\)))$/
+FAILED TO COMPILE
+
+/(?(?!a)a|b)/
+FAILED TO COMPILE
+
+/(?(?!a)b|a)/
+FAILED TO COMPILE
+
+/(?(?=a)b|a)/
+FAILED TO COMPILE
+
+/(?(?=a)a|b)/
+FAILED TO COMPILE
+
+/(?=(a+?))(\1ab)/
+    aaab: PASS
+
+/^(?=(a+?))\1ab/
+
+/(\w+:)+/
+    one:: PASS
+
+/$(?&lt;=^(a))/
+FAILED TO COMPILE
+
+/(?=(a+?))(\1ab)/
+    aaab: PASS
+
+/^(?=(a+?))\1ab/
+    *** Failers
+    aaab: PASS
+    aaab: PASS
+
+/([\w:]+::)?(\w+)$/
+    abcd: FAIL. Actual results: &quot;abcd,,abcd&quot;
+    xy:z:::abcd: PASS
+
+/^[^bcd]*(c+)/
+    aexycd: PASS
+
+/(a*)b+/
+    caab: PASS
+
+/([\w:]+::)?(\w+)$/
+    abcd: FAIL. Actual results: &quot;abcd,,abcd&quot;
+    xy:z:::abcd: PASS
+    *** Failers: FAIL. Actual results: &quot;Failers,,Failers&quot;
+    abcd:: PASS
+    abcd:: PASS
+
+/^[^bcd]*(c+)/
+    aexycd: PASS
+
+/(&gt;a+)ab/
+
+/(?&gt;a+)b/
+FAILED TO COMPILE
+
+/([[:]+)/
+    a:[b]:: PASS
+
+/([[=]+)/
+    a=[b]=: PASS
+
+/([[.]+)/
+    a.[b].: PASS
+
+/((?&gt;a+)b)/
+FAILED TO COMPILE
+
+/(?&gt;(a+))b/
+FAILED TO COMPILE
+
+/((?&gt;[^()]+)|\([^()]*\))+/
+FAILED TO COMPILE
+
+/a\Z/
+    *** Failers
+    aaab: PASS
+    a\nb\n: PASS
+
+/b\Z/
+    a\nb\n: FAIL. Actual results: &quot;null&quot;
+
+/b\z/
+
+/b\Z/
+    a\nb: FAIL. Actual results: &quot;null&quot;
+
+/b\z/
+    a\nb: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+
+/^(?&gt;(?(1)\.|())[^\W_](?&gt;[a-z0-9-]*[^\W_])?)+$/
+FAILED TO COMPILE
+
+/(?&gt;.*)(?&lt;=(abcd|wxyz))/
+FAILED TO COMPILE
+
+/word (?&gt;(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
+FAILED TO COMPILE
+
+/word (?&gt;[a-zA-Z0-9]+ ){0,30}otherword/
+FAILED TO COMPILE
+
+/(?&lt;=\d{3}(?!999))foo/
+FAILED TO COMPILE
+
+/(?&lt;=(?!...999)\d{3})foo/
+FAILED TO COMPILE
+
+/(?&lt;=\d{3}(?!999)...)foo/
+FAILED TO COMPILE
+
+/(?&lt;=\d{3}...)(?&lt;!999)foo/
+FAILED TO COMPILE
+
+/&lt;a[\s]+href[\s]*=[\s]*          # find &lt;a href=
+ ([\&quot;\'])?                       # find single or double quote
+ (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
+                                 # quote, otherwise match up to next space
+/isx
+FAILED TO COMPILE
+
+/&lt;a\s+href\s*=\s*                # find &lt;a href=
+ ([&quot;'])?                         # find single or double quote
+ (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
+                                 # quote, otherwise match up to next space
+/isx
+FAILED TO COMPILE
+
+/&lt;a\s+href(?&gt;\s*)=(?&gt;\s*)        # find &lt;a href=
+ ([&quot;'])?                         # find single or double quote
+ (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
+                                 # quote, otherwise match up to next space
+/isx
+FAILED TO COMPILE
+
+/((Z)+|A)*/
+    ZABCDEFG: PASS
+
+/(Z()|A)*/
+    ZABCDEFG: PASS
+
+/(Z(())|A)*/
+    ZABCDEFG: PASS
+
+/((?&gt;Z)+|A)*/
+FAILED TO COMPILE
+
+/((?&gt;)+|A)*/
+FAILED TO COMPILE
+
+/a*/g
+Global regex, cannot test matching via JS
+
+/^[a-\d]/
+    abcde: PASS
+    -things: PASS
+    0digit: PASS
+    *** Failers
+    bcdef    : PASS
+
+/^[\d-a]/
+    abcde: PASS
+    -things: PASS
+    0digit: PASS
+    *** Failers
+    bcdef    : PASS
+
+/[[:space:]]+/
+    &gt;         
+ + &lt;: FAIL. Actual results: &quot;null&quot;
+
+/[[:blank:]]+/
+    &gt;         
+ + &lt;: FAIL. Actual results: &quot;null&quot;
+
+/[\s]+/
+    &gt;         
+ + &lt;: FAIL. Actual results: &quot;         
+ + &quot;
+
+/\s+/
+    &gt;         
+ + &lt;: FAIL. Actual results: &quot;         
+ + &quot;
+
+/a b/x
+Unsupported modifiers: x
+
+/(?!\A)x/m
+  a\nxb\n: PASS
+
+/(?!^)x/m
+  a\nxb\n: FAIL. Actual results: &quot;x&quot;
+
+/abc\Qabc\Eabc/
+    abcabcabc: FAIL. Actual results: &quot;null&quot;
+
+/abc\Q(*+|\Eabc/
+FAILED TO COMPILE
+
+/   abc\Q abc\Eabc/x
+Unsupported modifiers: x
+
+/abc#comment
+    \Q#not comment
+    literal\E/x
+FAILED TO COMPILE
+
+/abc#comment
+    \Q#not comment
+    literal/x
+FAILED TO COMPILE
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment
+    /x
+FAILED TO COMPILE
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment/x
+FAILED TO COMPILE
+
+/\Qabc\$xyz\E/
+    abc\\\$xyz: FAIL. Actual results: &quot;null&quot;
+
+/\Qabc\E\$\Qxyz\E/
+    abc\$xyz: FAIL. Actual results: &quot;null&quot;
+
+/\Gabc/
+    abc: FAIL. Actual results: &quot;null&quot;
+    *** Failers
+    xyzabc  : PASS
+
+/\Gabc./g
+Global regex, cannot test matching via JS
+
+/abc./g
+Global regex, cannot test matching via JS
+
+/a(?x: b c )d/
+FAILED TO COMPILE
+
+/((?x)x y z | a b c)/
+FAILED TO COMPILE
+
+/(?i)AB(?-i)C/
+FAILED TO COMPILE
+
+/((?i)AB(?-i)C|D)E/
+FAILED TO COMPILE
+
+/(.*)\d+\1/
+    abc123abc: PASS
+    abc123bc : PASS
+
+/(.*)\d+\1/s
+    abc123abc: PASS
+    abc123bc : PASS
+
+/((.*))\d+\1/
+    abc123abc: PASS
+    abc123bc  : PASS
+
+/-- This tests for an IPv6 address in the form where it can have up to --/
+/-- eight components, one and only one of which is empty. This must be --/: PASS
+/-- an internal component. --/: PASS
+
+/^(?!:)                       # colon disallowed at start
+  (?:                         # start of item
+    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
+    (?(1)0 | () ) )           # if null previously matched, fail; else null
+    :                         # followed by colon
+  ){1,7}                      # end item; 1-7 of them required               
+  [0-9a-f]{1,4} $             # final hex number at end of string
+  (?(1)|.)                    # check that there was an empty component
+  /xi
+FAILED TO COMPILE
+
+/[z\Qa-d]\E]/
+    z: FAIL. Actual results: &quot;null&quot;
+    a: FAIL. Actual results: &quot;null&quot;
+    -: FAIL. Actual results: &quot;null&quot;
+    d: FAIL. Actual results: &quot;null&quot;
+    ] : FAIL. Actual results: &quot;null&quot;
+    *** Failers: FAIL. Actual results: &quot;null&quot;
+    b     : PASS
+
+/[\z\C]/
+    z: PASS
+    C : PASS
+
+/\M/
+    M : PASS
+
+/(a+)*b/
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa : PASS
+
+/(?i)reg(?:ul(?:[aä]|ae)r|ex)/
+FAILED TO COMPILE
+
+/Åæåä[à-ÿÀ-ß]+/
+    Åæåäà: PASS
+    Åæåäÿ: PASS
+    ÅæåäÀ: PASS
+    Åæåäß: PASS
+
+/(?&lt;=Z)X./
+FAILED TO COMPILE
+
+/ab cd (?x) de fg/
+FAILED TO COMPILE
+
+/ab cd(?x) de fg/
+FAILED TO COMPILE
+
+/(?&lt;![^f]oo)(bar)/
+FAILED TO COMPILE
+
+/(?&lt;![^f])X/
+FAILED TO COMPILE
+
+/(?&lt;=[^f])X/
+FAILED TO COMPILE
+
+/^/mg
+Global regex, cannot test matching via JS
+
+/(?&lt;=C\n)^/mg
+FAILED TO COMPILE
+
+/(?:(?(1)a|b)(X))+/
+FAILED TO COMPILE
+
+/(?:(?(1)\1a|b)(X|Y))+/
+FAILED TO COMPILE
+
+/()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
+FAILED TO COMPILE
+
+/[[,abc,]+]/
+    abc]: PASS
+    a,b]: PASS
+    [a,b,c]  : PASS
+
+/(?-x: )/x
+Unsupported modifiers: x
+
+&quot;(?x)(?-x: \s*#\s*)&quot;
+FAILED TO COMPILE
+
+&quot;(?x-is)(?:(?-ixs) \s*#\s*) include&quot;
+FAILED TO COMPILE
+
+/a*b*\w/
+    aaabbbb: PASS
+    aaaa: PASS
+    a: PASS
+
+/a*b?\w/
+    aaabbbb: PASS
+    aaaa: PASS
+    a: PASS
+
+/a*b{0,4}\w/
+    aaabbbb: PASS
+    aaaa: PASS
+    a: PASS
+
+/a*b{0,}\w/
+    aaabbbb: PASS
+    aaaa: PASS
+    a: PASS
+
+/a*\d*\w/
+    0a: PASS
+    a : PASS
+
+/a*b *\w/x
+Unsupported modifiers: x
+
+/a*b#comment
+  *\w/x
+FAILED TO COMPILE
+
+/a* b *\w/x
+Unsupported modifiers: x
+
+/^\w+=.*(\\\n.*)*/
+    abc=xyz\\\npqr: FAIL. Actual results: &quot;abc=xyz\\\npqr,&quot;
+
+/(?=(\w+))\1:/
+    abcd:: FAIL. Actual results: &quot;null&quot;
+
+/^(?=(\w+))\1:/
+    abcd:: PASS
+
+/^\Eabc/
+    abc: FAIL. Actual results: &quot;null&quot;
+
+/^[\Eabc]/
+    a: PASS
+    ** Failers : PASS
+    E : FAIL. Actual results: &quot;E&quot;
+
+/^[a-\Ec]/
+FAILED TO COMPILE
+
+/^[a\E\E-\Ec]/
+    b: FAIL. Actual results: &quot;null&quot;
+    ** Failers: PASS
+    -: PASS
+    E    : FAIL. Actual results: &quot;E&quot;
+
+/^[\E\Qa\E-\Qz\E]+/
+    b: FAIL. Actual results: &quot;null&quot;
+    ** Failers: PASS
+    -  : PASS
+
+/^[a\Q]bc\E]/
+    a: FAIL. Actual results: &quot;null&quot;
+    ]: FAIL. Actual results: &quot;null&quot;
+    c: FAIL. Actual results: &quot;null&quot;
+
+/^[a-\Q\E]/
+FAILED TO COMPILE
+
+/^(a()*)*/
+    aaaa: FAIL. Actual results: &quot;null&quot;
+
+/^(?:a(?:(?:))*)*/
+    aaaa: FAIL. Actual results: &quot;null&quot;
+
+/^(a()+)+/
+    aaaa: FAIL. Actual results: &quot;null&quot;
+
+/^(?:a(?:(?:))+)+/
+    aaaa: FAIL. Actual results: &quot;null&quot;
+
+/(a){0,3}(?(1)b|(c|))*D/
+FAILED TO COMPILE
+
+/(a|)*\d/
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: PASS
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4: FAIL. Actual results: &quot;null&quot;
+
+/(?&gt;a|)*\d/
+FAILED TO COMPILE
+
+/(?:a|)*\d/
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: PASS
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4: FAIL. Actual results: &quot;null&quot;
+
+/\Z/g
+Global regex, cannot test matching via JS
+
+/^(?s)(?&gt;.*)(?&lt;!\n)/
+FAILED TO COMPILE
+
+/^(?![^\n]*\n\z)/
+  abc: PASS
+  abc\n : FAIL. Actual results: &quot;&quot;
+
+/\z(?&lt;!\n)/
+FAILED TO COMPILE
+
+/(.*(.)?)*/
+    abcd: FAIL. Actual results: &quot;null&quot;
+
+/( (A | (?(1)0|) )*   )/x
+Unsupported modifiers: x
+
+/( ( (?(1)0|) )*   )/x
+Unsupported modifiers: x
+
+/(  (?(1)0|)*   )/x
+Unsupported modifiers: x
+
+DONE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastregextest1html"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regex/test1.html (0 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regex/test1.html                                (rev 0)
+++ trunk/LayoutTests/fast/regex/test1.html        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;head&gt;
+&lt;script src=&quot;pcre-test-runner.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+function runTest() {
+    runPCRETest(1, &quot;Test 1: main functionality.&quot;);
+}
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload = 'runTest()'&gt;
+&lt;/body&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/fast/regex/test1.html
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + text/html
</span></span></pre></div>
<a id="trunkLayoutTestsfastregextest4expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regex/test4-expected.txt (0 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regex/test4-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/regex/test4-expected.txt        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -0,0 +1,517 @@
</span><ins>+Test 4: UTF-8 support.
+
+/-- Do not use the \x{} construct except with patterns that have the --/
+/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/: PASS
+/-- that option is set. However, the latest Perls recognize them always. --/: PASS
+
+/a.b/8
+    acb: PASS
+    ab: PASS
+    aĀb : PASS
+    *** Failers
+    a\nb  : PASS
+
+/a(.{3})b/8
+    a䀀xyb : PASS
+    a䀀yb : PASS
+    a䀀Āyb : PASS
+    *** Failers
+    a䀀b : PASS
+    ac\ncb : PASS
+
+/a(.*?)(.)/
+    aÀˆb: PASS
+
+/a(.*?)(.)/8
+    aĀb: PASS
+
+/a(.*)(.)/
+    aÀˆb: PASS
+
+/a(.*)(.)/8
+    aĀb: PASS
+
+/a(.)(.)/
+    aÀ’bcd: PASS
+
+/a(.)(.)/8
+    aɀbcd: PASS
+
+/a(.?)(.)/
+    aÀ’bcd: PASS
+
+/a(.?)(.)/8
+    aɀbcd: PASS
+
+/a(.??)(.)/
+    aÀ’bcd: PASS
+
+/a(.??)(.)/8
+    aɀbcd: PASS
+
+/a(.{3})b/8
+    aሴxyb : PASS
+    aሴ䌡yb : PASS
+    aሴ䌡㐒b : PASS
+    *** Failers
+    aሴb : PASS
+    ac\ncb : PASS
+
+/a(.{3,})b/8
+    aሴxyb : PASS
+    aሴ䌡yb : PASS
+    aሴ䌡㐒b : PASS
+    axxxxbcdefghijb : PASS
+    aሴ䌡㐒㐡b : PASS
+    *** Failers
+    aሴb : PASS
+
+/a(.{3,}?)b/8
+    aሴxyb : PASS
+    aሴ䌡yb : PASS
+    aሴ䌡㐒b : PASS
+    axxxxbcdefghijb : PASS
+    aሴ䌡㐒㐡b : PASS
+    *** Failers
+    aሴb : PASS
+
+/a(.{3,5})b/8
+    aሴxyb : PASS
+    aሴ䌡yb : PASS
+    aሴ䌡㐒b : PASS
+    axxxxbcdefghijb : PASS
+    aሴ䌡㐒㐡b : PASS
+    axbxxbcdefghijb : PASS
+    axxxxxbcdefghijb : PASS
+    *** Failers
+    aሴb : PASS
+    axxxxxxbcdefghijb : PASS
+
+/a(.{3,5}?)b/8
+    aሴxyb : PASS
+    aሴ䌡yb : PASS
+    aሴ䌡㐒b : PASS
+    axxxxbcdefghijb : PASS
+    aሴ䌡㐒㐡b : PASS
+    axbxxbcdefghijb : PASS
+    axxxxxbcdefghijb : PASS
+    *** Failers
+    aሴb : PASS
+    axxxxxxbcdefghijb : PASS
+
+/^[a\x{c0}]/8
+    *** Failers
+    Ā: PASS
+
+/(?&lt;=aXb)cd/8
+FAILED TO COMPILE
+
+/(?&lt;=a\x{100}b)cd/8
+FAILED TO COMPILE
+
+/(?&lt;=a\x{100000}b)cd/8
+FAILED TO COMPILE
+
+/(?:\x{100}){3}b/8
+    ĀĀĀb: PASS
+    *** Failers 
+    ĀĀb: PASS
+
+/\x{ab}/8
+    « : PASS
+    Â«: PASS
+    *** Failers 
+    {ab}: PASS
+
+/(?&lt;=(.))X/8
+FAILED TO COMPILE
+
+/X(\C{3})/8
+    Xሴ: FAIL. Actual results: &quot;null&quot;
+
+/X(\C{4})/8
+    XሴYZ: FAIL. Actual results: &quot;null&quot;
+
+/X\C*/8
+    XYZabcdce: FAIL. Actual results: &quot;X&quot;
+
+/X\C*?/8
+    XYZabcde: PASS
+
+/X\C{3,5}/8
+    Xabcdefg   : FAIL. Actual results: &quot;null&quot;
+    Xሴ : FAIL. Actual results: &quot;null&quot;
+    XሴYZ: FAIL. Actual results: &quot;null&quot;
+    XሴԒ  : FAIL. Actual results: &quot;null&quot;
+    XሴԒYZ: FAIL. Actual results: &quot;null&quot;
+
+/X\C{3,5}?/8
+    Xabcdefg   : FAIL. Actual results: &quot;null&quot;
+    Xሴ : FAIL. Actual results: &quot;null&quot;
+    XሴYZ: FAIL. Actual results: &quot;null&quot;
+    XሴԒ  : FAIL. Actual results: &quot;null&quot;
+
+/[^a]+/8g
+Global regex, cannot test matching via JS
+
+/^[^a]{2}/8
+    Ābc: PASS
+
+/^[^a]{2,}/8
+    ĀbcAa: PASS
+
+/^[^a]{2,}?/8
+    Ābca: PASS
+
+/[^a]+/8ig
+Global regex, cannot test matching via JS
+
+/^[^a]{2}/8i
+    Ābc: PASS
+
+/^[^a]{2,}/8i
+    ĀbcAa: PASS
+
+/^[^a]{2,}?/8i
+    Ābca: PASS
+
+/\x{100}{0,0}/8
+    abcd: PASS
+
+/\x{100}?/8
+    abcd: PASS
+    ĀĀ : PASS
+
+/\x{100}{0,3}/8 
+    ĀĀ : PASS
+    ĀĀĀĀ : PASS
+
+/\x{100}*/8
+    abce: PASS
+    ĀĀĀĀ : PASS
+
+/\x{100}{1,1}/8
+    abcdĀĀĀĀ : PASS
+
+/\x{100}{1,3}/8
+    abcdĀĀĀĀ : PASS
+
+/\x{100}+/8
+    abcdĀĀĀĀ : PASS
+
+/\x{100}{3}/8
+    abcdĀĀĀXX: PASS
+
+/\x{100}{3,5}/8
+    abcdĀĀĀĀĀĀĀXX: PASS
+
+/\x{100}{3,}/8
+    abcdĀĀĀĀĀĀĀXX: PASS
+
+/(?&lt;=a\x{100}{2}b)X/8+
+Unsupported modifiers: +
+
+/\D*/8
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: FAIL. Actual results: &quot;  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;
+
+/\D*/8
+  ĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀ: FAIL. Actual results: &quot;  ĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀ&quot;
+
+/\D/8
+    1X2: PASS
+    1Ā2 : PASS
+
+/&gt;\S/8
+    &gt; &gt;X Y: PASS
+    &gt; &gt;Ā Y: PASS
+
+/\d/8
+    Ā3: PASS
+
+/\s/8
+    Ā X: PASS
+
+/\D+/8
+    12abcd34: PASS
+    *** Failers
+    1234  : FAIL. Actual results: &quot;  &quot;
+
+/\D{2,3}/8
+    12abcd34: PASS
+    12ab34: PASS
+    *** Failers  
+    1234: PASS
+    12a34  : FAIL. Actual results: &quot;  &quot;
+
+/\D{2,3}?/8
+    12abcd34: PASS
+    12ab34: PASS
+    *** Failers  
+    1234: PASS
+    12a34  : FAIL. Actual results: &quot;  &quot;
+
+/\d+/8
+    12abcd34: PASS
+    *** Failers
+
+/\d{2,3}/8
+    12abcd34: PASS
+    1234abcd: PASS
+    *** Failers  
+    1.4 : PASS
+
+/\d{2,3}?/8
+    12abcd34: PASS
+    1234abcd: PASS
+    *** Failers  
+    1.4 : PASS
+
+/\S+/8
+    12abcd34: PASS
+    *** Failers
+    \    \ : FAIL. Actual results: &quot;\&quot;
+
+/\S{2,3}/8
+    12abcd34: PASS
+    1234abcd: PASS
+    *** Failers
+    \     \  : PASS
+
+/\S{2,3}?/8
+    12abcd34: PASS
+    1234abcd: PASS
+    *** Failers
+    \     \  : PASS
+
+/&gt;\s+&lt;/8+
+Unsupported modifiers: +
+
+/&gt;\s{2,3}&lt;/8+
+Unsupported modifiers: +
+
+/&gt;\s{2,3}?&lt;/8+
+Unsupported modifiers: +
+
+/\w+/8
+    12      34: PASS
+    *** Failers
+    +++=*! : PASS
+
+/\w{2,3}/8
+    ab  cd: PASS
+    abcd ce: PASS
+    *** Failers
+    a.b.c: PASS
+
+/\w{2,3}?/8
+    ab  cd: PASS
+    abcd ce: PASS
+    *** Failers
+    a.b.c: PASS
+
+/\W+/8
+    12====34: PASS
+    *** Failers
+    abcd : FAIL. Actual results: &quot; &quot;
+
+/\W{2,3}/8
+    ab====cd: PASS
+    ab==cd: PASS
+    *** Failers
+    a.b.c: PASS
+
+/\W{2,3}?/8
+    ab====cd: PASS
+    ab==cd: PASS
+    *** Failers
+    a.b.c: PASS
+
+/[\x{100}]/8
+    Ā: PASS
+    ZĀ: PASS
+    ĀZ: PASS
+    *** Failers 
+
+/[Z\x{100}]/8
+    ZĀ: PASS
+    Ā: PASS
+    ĀZ: PASS
+    *** Failers 
+
+/[\x{100}\x{200}]/8
+   abĀcd: PASS
+   abȀcd: PASS
+   *** Failers  
+
+/[\x{100}-\x{200}]/8
+   abĀcd: PASS
+   abȀcd: PASS
+   abđcd : PASS
+   *** Failers  
+
+/[z-\x{200}]/8
+   abĀcd: PASS
+   abȀcd: PASS
+   abđcd : PASS
+   abzcd: PASS
+   ab|cd  : PASS
+   *** Failers  
+
+/[Q\x{100}\x{200}]/8
+   abĀcd: PASS
+   abȀcd: PASS
+   Q? : PASS
+   *** Failers  
+
+/[Q\x{100}-\x{200}]/8
+   abĀcd: PASS
+   abȀcd: PASS
+   abđcd : PASS
+   Q? : PASS
+   *** Failers  
+
+/[Qz-\x{200}]/8
+   abĀcd: PASS
+   abȀcd: PASS
+   abđcd : PASS
+   abzcd: PASS
+   ab|cd  : PASS
+   Q? : PASS
+   *** Failers  
+
+/[\x{100}\x{200}]{1,3}/8
+   abĀcd: PASS
+   abȀcd: PASS
+   abȀĀȀĀcd: PASS
+   *** Failers  
+
+/[\x{100}\x{200}]{1,3}?/8
+   abĀcd: PASS
+   abȀcd: PASS
+   abȀĀȀĀcd: PASS
+   *** Failers  
+
+/[Q\x{100}\x{200}]{1,3}/8
+   abĀcd: PASS
+   abȀcd: PASS
+   abȀĀȀĀcd: PASS
+   *** Failers  
+
+/[Q\x{100}\x{200}]{1,3}?/8
+   abĀcd: PASS
+   abȀcd: PASS
+   abȀĀȀĀcd: PASS
+   *** Failers  
+
+/(?&lt;=[\x{100}\x{200}])X/8
+FAILED TO COMPILE
+
+/(?&lt;=[Q\x{100}\x{200}])X/8
+FAILED TO COMPILE
+
+/(?&lt;=[\x{100}\x{200}]{3})X/8
+FAILED TO COMPILE
+
+/[^\x{100}\x{200}]X/8
+    AX: PASS
+    ŐX: PASS
+    ԀX : PASS
+    *** Failers
+    ĀX: PASS
+    ȀX   : PASS
+
+/[^Q\x{100}\x{200}]X/8
+    AX: PASS
+    ŐX: PASS
+    ԀX : PASS
+    *** Failers
+    ĀX: PASS
+    ȀX   : PASS
+    QX : PASS
+
+/[^\x{100}-\x{200}]X/8
+    AX: PASS
+    ԀX : PASS
+    *** Failers
+    ĀX: PASS
+    ŐX: PASS
+    ȀX   : PASS
+
+/a\Cb/
+    aXb: FAIL. Actual results: &quot;null&quot;
+    a\nb: FAIL. Actual results: &quot;null&quot;
+
+/a\Cb/8
+    aXb: FAIL. Actual results: &quot;null&quot;
+    a\nb: FAIL. Actual results: &quot;null&quot;
+    *** Failers 
+    aĀb : PASS
+
+/[z-\x{100}]/8i
+    z: PASS
+    Z : PASS
+    Ā: PASS
+    *** Failers
+    Ă: PASS
+    y    : PASS
+
+/[\xFF]/
+    &gt;ÿ&lt;: PASS
+
+/[\xff]/8
+    &gt;ÿ&lt;: PASS
+
+/[^\xFF]/
+    XYZ: PASS
+
+/[^\xff]/8
+    XYZ: PASS
+    ģ : PASS
+
+/^[ac]*b/8
+  xb: PASS
+
+/^[ac\x{100}]*b/8
+  xb: PASS
+
+/^[^x]*b/8i
+  xb: PASS
+
+/^[^x]*b/8
+  xb: PASS
+
+/^\d*b/8
+  xb : PASS
+
+/(|a)/g8
+Global regex, cannot test matching via JS
+
+/^\x{85}$/8i
+    …: PASS
+
+/^ሴ/8
+    ሴ : PASS
+
+/^\ሴ/8
+    ሴ : PASS
+
+&quot;(?s)(.{1,5})&quot;8
+FAILED TO COMPILE
+
+/a*\x{100}*\w/8
+    a : PASS
+
+/\S\S/8g
+Global regex, cannot test matching via JS
+
+/\S{2}/8g
+Global regex, cannot test matching via JS
+
+/\W\W/8g
+Global regex, cannot test matching via JS
+
+/\W{2}/8g
+Global regex, cannot test matching via JS
+
+DONE
+
</ins><span class="cx">Property changes on: trunk/LayoutTests/fast/regex/test4-expected.txt
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + text/plain
</span><span class="cx">Name: svn:eol-style
</span><span class="cx">   + native
</span></span></pre></div>
<a id="trunkLayoutTestsfastregextest4html"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regex/test4.html (0 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regex/test4.html                                (rev 0)
+++ trunk/LayoutTests/fast/regex/test4.html        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;head&gt;
+&lt;script src=&quot;pcre-test-runner.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+function runTest() {
+    runPCRETest(4, &quot;Test 4: UTF-8 support.&quot;);
+}
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload = 'runTest()'&gt;
+&lt;/body&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/fast/regex/test4.html
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + text/html
</span></span></pre></div>
<a id="trunkLayoutTestsfastregextestinput1"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regex/testinput1 (0 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regex/testinput1                                (rev 0)
+++ trunk/LayoutTests/fast/regex/testinput1        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -0,0 +1,3237 @@
</span><ins>+/the quick brown fox/
+    the quick brown fox
+    The quick brown FOX
+    What do you know about the quick brown fox?
+    What do you know about THE QUICK BROWN FOX?
+
+/The quick brown fox/i
+    the quick brown fox
+    The quick brown FOX
+    What do you know about the quick brown fox?
+    What do you know about THE QUICK BROWN FOX?
+
+/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
+    abcd\t\n\r\f\a\e9;\$\\?caxyz
+
+/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
+    abxyzpqrrrabbxyyyypqAzz
+    abxyzpqrrrabbxyyyypqAzz
+    aabxyzpqrrrabbxyyyypqAzz
+    aaabxyzpqrrrabbxyyyypqAzz
+    aaaabxyzpqrrrabbxyyyypqAzz
+    abcxyzpqrrrabbxyyyypqAzz
+    aabcxyzpqrrrabbxyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypAzz
+    aaabcxyzpqrrrabbxyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqqAzz
+    aaaabcxyzpqrrrabbxyyyypqAzz
+    abxyzzpqrrrabbxyyyypqAzz
+    aabxyzzzpqrrrabbxyyyypqAzz
+    aaabxyzzzzpqrrrabbxyyyypqAzz
+    aaaabxyzzzzpqrrrabbxyyyypqAzz
+    abcxyzzpqrrrabbxyyyypqAzz
+    aabcxyzzzpqrrrabbxyyyypqAzz
+    aaabcxyzzzzpqrrrabbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypABzz
+    aaabcxyzpqrrrabbxyyyypABBzz
+    &gt;&gt;&gt;aaabxyzpqrrrabbxyyyypqAzz
+    &gt;aaaabxyzpqrrrabbxyyyypqAzz
+    &gt;&gt;&gt;&gt;abcxyzpqrrrabbxyyyypqAzz
+    *** Failers
+    abxyzpqrrabbxyyyypqAzz
+    abxyzpqrrrrabbxyyyypqAzz
+    abxyzpqrrrabxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyypqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
+
+/^(abc){1,2}zz/
+    abczz
+    abcabczz
+    *** Failers
+    zz
+    abcabcabczz
+    &gt;&gt;abczz
+
+/^(b+?|a){1,2}?c/
+    bc
+    bbc
+    bbbc
+    bac
+    bbac
+    aac
+    abbbbbbbbbbbc
+    bbbbbbbbbbbac
+    *** Failers
+    aaac
+    abbbbbbbbbbbac
+
+/^(b+|a){1,2}c/
+    bc
+    bbc
+    bbbc
+    bac
+    bbac
+    aac
+    abbbbbbbbbbbc
+    bbbbbbbbbbbac
+    *** Failers
+    aaac
+    abbbbbbbbbbbac
+
+/^(b+|a){1,2}?bc/
+    bbc
+
+/^(b*|ba){1,2}?bc/
+    babc
+    bbabc
+    bababc
+    *** Failers
+    bababbc
+    babababc
+
+/^(ba|b*){1,2}?bc/
+    babc
+    bbabc
+    bababc
+    *** Failers
+    bababbc
+    babababc
+
+/^\ca\cA\c[\c{\c:/
+    \x01\x01\e;z
+
+/^[ab\]cde]/
+    athing
+    bthing
+    ]thing
+    cthing
+    dthing
+    ething
+    *** Failers
+    fthing
+    [thing
+    \\thing
+
+/^[]cde]/
+    ]thing
+    cthing
+    dthing
+    ething
+    *** Failers
+    athing
+    fthing
+
+/^[^ab\]cde]/
+    fthing
+    [thing
+    \\thing
+    *** Failers
+    athing
+    bthing
+    ]thing
+    cthing
+    dthing
+    ething
+
+/^[^]cde]/
+    athing
+    fthing
+    *** Failers
+    ]thing
+    cthing
+    dthing
+    ething
+
+/^\/
+    
+
+/^ÿ/
+    ÿ
+
+/^[0-9]+$/
+    0
+    1
+    2
+    3
+    4
+    5
+    6
+    7
+    8
+    9
+    10
+    100
+    *** Failers
+    abc
+
+/^.*nter/
+    enter
+    inter
+    uponter
+
+/^xxx[0-9]+$/
+    xxx0
+    xxx1234
+    *** Failers
+    xxx
+
+/^.+[0-9][0-9][0-9]$/
+    x123
+    xx123
+    123456
+    *** Failers
+    123
+    x1234
+
+/^.+?[0-9][0-9][0-9]$/
+    x123
+    xx123
+    123456
+    *** Failers
+    123
+    x1234
+
+/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
+    abc!pqr=apquxz.ixr.zzz.ac.uk
+    *** Failers
+    !pqr=apquxz.ixr.zzz.ac.uk
+    abc!=apquxz.ixr.zzz.ac.uk
+    abc!pqr=apquxz:ixr.zzz.ac.uk
+    abc!pqr=apquxz.ixr.zzz.ac.ukk
+
+/:/
+    Well, we need a colon: somewhere
+    *** Fail if we don't
+
+/([\da-f:]+)$/i
+    0abc
+    abc
+    fed
+    E
+    ::
+    5f03:12C0::932e
+    fed def
+    Any old stuff
+    *** Failers
+    0zzz
+    gzzz
+    fed\x20
+    Any old rubbish
+
+/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
+    .1.2.3
+    A.12.123.0
+    *** Failers
+    .1.2.3333
+    1.2.3
+    1234.2.3
+
+/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
+    1 IN SOA non-sp1 non-sp2(
+    1    IN    SOA    non-sp1    non-sp2   (
+    *** Failers
+    1IN SOA non-sp1 non-sp2(
+
+/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
+    a.
+    Z.
+    2.
+    ab-c.pq-r.
+    sxk.zzz.ac.uk.
+    x-.y-.
+    *** Failers
+    -abc.peq.
+
+/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
+    *.a
+    *.b0-a
+    *.c3-b.c
+    *.c-a.b-c
+    *** Failers
+    *.0
+    *.a-
+    *.a-b.c-
+    *.c-a.0-c
+
+/^(?=ab(de))(abd)(e)/
+    abde
+
+/^(?!(ab)de|x)(abd)(f)/
+    abdf
+
+/^(?=(ab(cd)))(ab)/
+    abcd
+
+/^[\da-f](\.[\da-f])*$/i
+    a.b.c.d
+    A.B.C.D
+    a.b.c.1.2.3.C
+
+/^\&quot;.*\&quot;\s*(;.*)?$/
+    \&quot;1234\&quot;
+    \&quot;abcd\&quot; ;
+    \&quot;\&quot; ; rhubarb
+    *** Failers
+    \&quot;1234\&quot; : things
+
+/^$/
+    \
+    *** Failers
+
+/   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
+    ab c
+    *** Failers
+    abc
+    ab cde
+
+/(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
+    ab c
+    *** Failers
+    abc
+    ab cde
+
+/^   a\ b[c ]d       $/x
+    a bcd
+    a b d
+    *** Failers
+    abcd
+    ab d
+
+/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
+    abcdefhijklm
+
+/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
+    abcdefhijklm
+
+/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
+    a+ Z0+\x08\n\x1d\x12
+
+/^[.^$|()*+?{,}]+/
+    .^\$(*+)|{?,?}
+
+/^a*\w/
+    z
+    az
+    aaaz
+    a
+    aa
+    aaaa
+    a+
+    aa+
+
+/^a*?\w/
+    z
+    az
+    aaaz
+    a
+    aa
+    aaaa
+    a+
+    aa+
+
+/^a+\w/
+    az
+    aaaz
+    aa
+    aaaa
+    aa+
+
+/^a+?\w/
+    az
+    aaaz
+    aa
+    aaaa
+    aa+
+
+/^\d{8}\w{2,}/
+    1234567890
+    12345678ab
+    12345678__
+    *** Failers
+    1234567
+
+/^[aeiou\d]{4,5}$/
+    uoie
+    1234
+    12345
+    aaaaa
+    *** Failers
+    123456
+
+/^[aeiou\d]{4,5}?/
+    uoie
+    1234
+    12345
+    aaaaa
+    123456
+
+/\A(abc|def)=(\1){2,3}\Z/
+    abc=abcabc
+    def=defdefdef
+    *** Failers
+    abc=defdef
+
+/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
+    abcdefghijkcda2
+    abcdefghijkkkkcda2
+
+/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
+    cataract cataract23
+    catatonic catatonic23
+    caterpillar caterpillar23
+
+
+/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
+    From abcd  Mon Sep 01 12:33:02 1997
+
+/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
+    From abcd  Mon Sep 01 12:33:02 1997
+    From abcd  Mon Sep  1 12:33:02 1997
+    *** Failers
+    From abcd  Sep 01 12:33:02 1997
+
+/^12.34/s
+    12\n34
+    12\r34
+
+/\w+(?=\t)/
+    the quick brown\t fox
+
+/foo(?!bar)(.*)/
+    foobar is foolish see?
+
+/(?:(?!foo)...|^.{0,2})bar(.*)/
+    foobar crowbar etc
+    barrel
+    2barrel
+    A barrel
+
+/^(\D*)(?=\d)(?!123)/
+    abc456
+    *** Failers
+    abc123
+
+/^1234(?# test newlines
+  inside)/
+    1234
+
+/^1234 #comment in extended re
+  /x
+    1234
+
+/#rhubarb
+  abcd/x
+    abcd
+
+/^abcd#rhubarb/x
+    abcd
+
+/^(a)\1{2,3}(.)/
+    aaab
+    aaaab
+    aaaaab
+    aaaaaab
+
+/(?!^)abc/
+    the abc
+    *** Failers
+    abc
+
+/(?=^)abc/
+    abc
+    *** Failers
+    the abc
+
+/^[ab]{1,3}(ab*|b)/
+    aabbbbb
+
+/^[ab]{1,3}?(ab*|b)/
+    aabbbbb
+
+/^[ab]{1,3}?(ab*?|b)/
+    aabbbbb
+
+/^[ab]{1,3}(ab*?|b)/
+    aabbbbb
+
+/abc\0def\00pqr\000xyz\0000AB/
+    abc\0def\00pqr\000xyz\0000AB
+    abc456 abc\0def\00pqr\000xyz\0000ABCDE
+
+/abc\x0def\x00pqr\x000xyz\x0000AB/
+    abc\x0def\x00pqr\x000xyz\x0000AB
+    abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
+
+/^[\000-\037]/
+    \0A
+    \01B
+    \037C
+
+/\0*/
+    \0\0\0\0
+
+/A\x0{2,3}Z/
+    The A\x0\x0Z
+    An A\0\x0\0Z
+    *** Failers
+    A\0Z
+    A\0\x0\0\x0Z
+
+/^(cow|)\1(bell)/
+    cowcowbell
+    bell
+    *** Failers
+    cowbell
+
+/^\s/
+    \040abc
+    \x0cabc
+    \nabc
+    \rabc
+    \tabc
+    *** Failers
+    abc
+
+/^a        b
+       c/x
+    abc
+
+/^(a|)\1*b/
+    ab
+    aaaab
+    b
+    *** Failers
+    acb
+
+/^(a|)\1+b/
+    aab
+    aaaab
+    b
+    *** Failers
+    ab
+
+/^(a|)\1?b/
+    ab
+    aab
+    b
+    *** Failers
+    acb
+
+/^(a|)\1{2}b/
+    aaab
+    b
+    *** Failers
+    ab
+    aab
+    aaaab
+
+/^(a|)\1{2,3}b/
+    aaab
+    aaaab
+    b
+    *** Failers
+    ab
+    aab
+    aaaaab
+
+/ab{1,3}bc/
+    abbbbc
+    abbbc
+    abbc
+    *** Failers
+    abc
+    abbbbbc
+
+/([^.]*)\.([^:]*):[T ]+(.*)/
+    track1.title:TBlah blah blah
+
+/([^.]*)\.([^:]*):[T ]+(.*)/i
+    track1.title:TBlah blah blah
+
+/([^.]*)\.([^:]*):[t ]+(.*)/i
+    track1.title:TBlah blah blah
+
+/^[W-c]+$/
+    WXY_^abc
+    *** Failers
+    wxy
+
+/^[W-c]+$/i
+    WXY_^abc
+    wxy_^ABC
+
+/^[\x3f-\x5F]+$/i
+    WXY_^abc
+    wxy_^ABC
+
+/^abc$/m
+    abc
+    qqq\nabc
+    abc\nzzz
+    qqq\nabc\nzzz
+
+/^abc$/
+    abc
+    *** Failers
+    qqq\nabc
+    abc\nzzz
+    qqq\nabc\nzzz
+
+/\Aabc\Z/m
+    abc
+    abc\n 
+    *** Failers
+    qqq\nabc
+    abc\nzzz
+    qqq\nabc\nzzz
+    
+/\A(.)*\Z/s
+    abc\ndef
+
+/\A(.)*\Z/m
+    *** Failers
+    abc\ndef
+
+/(?:b)|(?::+)/
+    b::c
+    c::b
+
+/[-az]+/
+    az-
+    *** Failers
+    b
+
+/[az-]+/
+    za-
+    *** Failers
+    b
+
+/[a\-z]+/
+    a-z
+    *** Failers
+    b
+
+/[a-z]+/
+    abcdxyz
+
+/[\d-]+/
+    12-34
+    *** Failers
+    aaa
+
+/[\d-z]+/
+    12-34z
+    *** Failers
+    aaa
+
+/\x5c/
+    \\
+
+/\x20Z/
+    the Zoo
+    *** Failers
+    Zulu
+
+/(abc)\1/i
+    abcabc
+    ABCabc
+    abcABC
+
+/ab{3cd/
+    ab{3cd
+
+/ab{3,cd/
+    ab{3,cd
+
+/ab{3,4a}cd/
+    ab{3,4a}cd
+
+/{4,5a}bc/
+    {4,5a}bc
+
+/abc$/
+    abc
+    abc\n
+    *** Failers
+    abc\ndef
+
+/(abc)\123/
+    abc\x53
+
+/(abc)\223/
+    abc\x93
+
+/(abc)\323/
+    abc\xd3
+
+/(abc)\100/
+    abc\x40
+    abc\100
+
+/(abc)\1000/
+    abc\x400
+    abc\x40\x30
+    abc\1000
+    abc\100\x30
+    abc\100\060
+    abc\100\60
+
+/abc\81/
+    abc\081
+    abc\0\x38\x31
+
+/abc\91/
+    abc\091
+    abc\0\x39\x31
+
+/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
+    abcdefghijkllS
+
+/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
+    abcdefghijk\12S
+
+/ab\idef/
+    abidef
+
+/a{0}bc/
+    bc
+
+/(a|(bc)){0,0}?xyz/
+    xyz
+
+/abc[\10]de/
+    abc\010de
+
+/abc[\1]de/
+    abc\1de
+
+/(abc)[\1]de/
+    abc\1de
+
+/(?s)a.b/
+    a\nb
+
+/^([^a])([^\b])([^c]*)([^d]{3,4})/
+    baNOTccccd
+    baNOTcccd
+    baNOTccd
+    bacccd
+    *** Failers
+    anything
+    b\bc   
+    baccd
+
+/[^a]/
+    Abc
+  
+/[^a]/i
+    Abc 
+
+/[^a]+/
+    AAAaAbc
+  
+/[^a]+/i
+    AAAaAbc 
+
+/[^a]+/
+    bbb\nccc
+   
+/[^k]$/
+    abc
+    *** Failers
+    abk   
+   
+/[^k]{2,3}$/
+    abc
+    kbc
+    kabc 
+    *** Failers
+    abk
+    akb
+    akk 
+
+/^\d{8,}\@.+[^k]$/
+    12345678\@a.b.c.d
+    123456789\@x.y.z
+    *** Failers
+    12345678\@x.y.uk
+    1234567\@a.b.c.d       
+
+/(a)\1{8,}/
+    aaaaaaaaa
+    aaaaaaaaaa
+    *** Failers
+    aaaaaaa   
+
+/[^a]/
+    aaaabcd
+    aaAabcd 
+
+/[^a]/i
+    aaaabcd
+    aaAabcd 
+
+/[^az]/
+    aaaabcd
+    aaAabcd 
+
+/[^az]/i
+    aaaabcd
+    aaAabcd 
+
+/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366
 \367\370\371\372\373\374\375\376\377/
+ \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366
 \367\370\371\372\373\374\375\376\377
+
+/P[^*]TAIRE[^*]{1,6}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+
+/P[^*]TAIRE[^*]{1,}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+
+/(\.\d\d[1-9]?)\d+/
+    1.230003938
+    1.875000282   
+    1.235  
+                  
+/(\.\d\d((?=0)|\d(?=\d)))/
+    1.230003938      
+    1.875000282
+    *** Failers 
+    1.235 
+    
+/a(?)b/
+    ab 

+/\b(foo)\s+(\w+)/i
+    Food is on the foo table
+    
+/foo(.*)bar/
+    The food is under the bar in the barn.
+    
+/foo(.*?)bar/  
+    The food is under the bar in the barn.
+
+/(.*)(\d*)/
+    I have 2 numbers: 53147
+    
+/(.*)(\d+)/
+    I have 2 numbers: 53147

+/(.*?)(\d*)/
+    I have 2 numbers: 53147
+
+/(.*?)(\d+)/
+    I have 2 numbers: 53147
+
+/(.*)(\d+)$/
+    I have 2 numbers: 53147
+
+/(.*?)(\d+)$/
+    I have 2 numbers: 53147
+
+/(.*)\b(\d+)$/
+    I have 2 numbers: 53147
+
+/(.*\D)(\d+)$/
+    I have 2 numbers: 53147
+
+/^\D*(?!123)/
+    ABC123
+     
+/^(\D*)(?=\d)(?!123)/
+    ABC445
+    *** Failers
+    ABC123
+    
+/^[W-]46]/
+    W46]789 
+    -46]789
+    *** Failers
+    Wall
+    Zebra
+    42
+    [abcd] 
+    ]abcd[
+       
+/^[W-\]46]/
+    W46]789 
+    Wall
+    Zebra
+    Xylophone  
+    42
+    [abcd] 
+    ]abcd[
+    \\backslash 
+    *** Failers
+    -46]789
+    well
+    
+/\d\d\/\d\d\/\d\d\d\d/
+    01/01/2000
+
+/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark otherword
+  word cat dog elephant mussel cow horse canary baboon snake shark
+
+/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+
+/^(a){0,0}/
+    bcd
+    abc
+    aab     
+
+/^(a){0,1}/
+    bcd
+    abc
+    aab  
+
+/^(a){0,2}/
+    bcd
+    abc
+    aab  
+
+/^(a){0,3}/
+    bcd
+    abc
+    aab
+    aaa   
+
+/^(a){0,}/
+    bcd
+    abc
+    aab
+    aaa
+    aaaaaaaa    
+
+/^(a){1,1}/
+    bcd
+    abc
+    aab  
+
+/^(a){1,2}/
+    bcd
+    abc
+    aab  
+
+/^(a){1,3}/
+    bcd
+    abc
+    aab
+    aaa   
+
+/^(a){1,}/
+    bcd
+    abc
+    aab
+    aaa
+    aaaaaaaa    
+
+/.*\.gif/
+    borfle\nbib.gif\nno
+
+/.{0,}\.gif/
+    borfle\nbib.gif\nno
+
+/.*\.gif/m
+    borfle\nbib.gif\nno
+
+/.*\.gif/s
+    borfle\nbib.gif\nno
+
+/.*\.gif/ms
+    borfle\nbib.gif\nno
+    
+/.*$/
+    borfle\nbib.gif\nno
+
+/.*$/m
+    borfle\nbib.gif\nno
+
+/.*$/s
+    borfle\nbib.gif\nno
+
+/.*$/ms
+    borfle\nbib.gif\nno
+    
+/.*$/
+    borfle\nbib.gif\nno\n
+
+/.*$/m
+    borfle\nbib.gif\nno\n
+
+/.*$/s
+    borfle\nbib.gif\nno\n
+
+/.*$/ms
+    borfle\nbib.gif\nno\n
+    
+/(.*X|^B)/
+    abcde\n1234Xyz
+    BarFoo 
+    *** Failers
+    abcde\nBar  
+
+/(.*X|^B)/m
+    abcde\n1234Xyz
+    BarFoo 
+    abcde\nBar  
+
+/(.*X|^B)/s
+    abcde\n1234Xyz
+    BarFoo 
+    *** Failers
+    abcde\nBar  
+
+/(.*X|^B)/ms
+    abcde\n1234Xyz
+    BarFoo 
+    abcde\nBar  
+
+/(?s)(.*X|^B)/
+    abcde\n1234Xyz
+    BarFoo 
+    *** Failers 
+    abcde\nBar  
+
+/(?s:.*X|^B)/
+    abcde\n1234Xyz
+    BarFoo 
+    *** Failers 
+    abcde\nBar  
+
+/^.*B/
+    **** Failers
+    abc\nB
+     
+/(?s)^.*B/
+    abc\nB
+
+/(?m)^.*B/
+    abc\nB
+     
+/(?ms)^.*B/
+    abc\nB
+
+/(?ms)^B/
+    abc\nB
+
+/(?s)B$/
+    B\n
+
+/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
+    123456654321
+  
+/^\d\d\d\d\d\d\d\d\d\d\d\d/
+    123456654321 
+
+/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
+    123456654321
+  
+/^[abc]{12}/
+    abcabcabcabc
+    
+/^[a-c]{12}/
+    abcabcabcabc
+    
+/^(a|b|c){12}/
+    abcabcabcabc 
+
+/^[abcdefghijklmnopqrstuvwxy0123456789]/
+    n
+    *** Failers 
+    z 
+
+/abcde{0,0}/
+    abcd
+    *** Failers
+    abce  
+
+/ab[cd]{0,0}e/
+    abe
+    *** Failers
+    abcde 
+    
+/ab(c){0,0}d/
+    abd
+    *** Failers
+    abcd   
+
+/a(b*)/
+    a
+    ab
+    abbbb
+    *** Failers
+    bbbbb    
+    
+/ab\d{0}e/
+    abe
+    *** Failers
+    ab1e   
+    
+/&quot;([^\\&quot;]+|\\.)*&quot;/
+    the \&quot;quick\&quot; brown fox
+    \&quot;the \\\&quot;quick\\\&quot; brown fox\&quot; 
+
+/.*?/g+
+    abc
+  
+/\b/g+
+    abc 
+
+/\b/+g
+    abc 
+
+//g
+    abc
+
+/&lt;tr([\w\W\s\d][^&lt;&gt;]{0,})&gt;&lt;TD([\w\W\s\d][^&lt;&gt;]{0,})&gt;([\d]{0,}\.)(.*)((&lt;BR&gt;([\w\W\s\d][^&lt;&gt;]{0,})|[\s]{0,}))&lt;\/a&gt;&lt;\/TD&gt;&lt;TD([\w\W\s\d][^&lt;&gt;]{0,})&gt;([\w\W\s\d][^&lt;&gt;]{0,})&lt;\/TD&gt;&lt;TD([\w\W\s\d][^&lt;&gt;]{0,})&gt;([\w\W\s\d][^&lt;&gt;]{0,})&lt;\/TD&gt;&lt;\/TR&gt;/is
+  &lt;TR BGCOLOR='#DBE9E9'&gt;&lt;TD align=left valign=top&gt;43.&lt;a href='joblist.cfm?JobID=94 6735&amp;Keyword='&gt;Word Processor&lt;BR&gt;(N-1286)&lt;/a&gt;&lt;/TD&gt;&lt;TD align=left valign=top&gt;Lega lstaff.com&lt;/TD&gt;&lt;TD align=left valign=top&gt;CA - Statewide&lt;/TD&gt;&lt;/TR&gt;
+
+/a[^a]b/
+    acb
+    a\nb
+    
+/a.b/
+    acb
+    *** Failers 
+    a\nb   
+    
+/a[^a]b/s
+    acb
+    a\nb  
+    
+/a.b/s
+    acb
+    a\nb  
+
+/^(b+?|a){1,2}?c/
+    bac
+    bbac
+    bbbac
+    bbbbac
+    bbbbbac 
+
+/^(b+|a){1,2}?c/
+    bac
+    bbac
+    bbbac
+    bbbbac
+    bbbbbac 
+    
+/(?!\A)x/m
+    x\nb\n
+    a\bx\n  
+    
+/\x0{ab}/
+    \0{ab} 
+
+/(A|B)*?CD/
+    CD 
+    
+/(A|B)*CD/
+    CD 
+
+/(AB)*?\1/
+    ABABAB
+
+/(AB)*\1/
+    ABABAB
+    
+/(?&lt;!bar)foo/
+    foo
+    catfood
+    arfootle
+    rfoosh
+    *** Failers
+    barfoo
+    towbarfoo
+
+/\w{3}(?&lt;!bar)foo/
+    catfood
+    *** Failers
+    foo
+    barfoo
+    towbarfoo
+
+/(?&lt;=(foo)a)bar/
+    fooabar
+    *** Failers
+    bar
+    foobbar
+      
+/\Aabc\z/m
+    abc
+    *** Failers
+    abc\n   
+    qqq\nabc
+    abc\nzzz
+    qqq\nabc\nzzz
+
+&quot;(?&gt;.*/)foo&quot;
+    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
+
+&quot;(?&gt;.*/)foo&quot;
+    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
+
+/(?&gt;(\.\d\d[1-9]?))\d+/
+    1.230003938
+    1.875000282
+    *** Failers 
+    1.235 
+
+/^((?&gt;\w+)|(?&gt;\s+))*$/
+    now is the time for all good men to come to the aid of the party
+    *** Failers
+    this is not a line with only words and spaces!
+    
+/(\d+)(\w)/
+    12345a
+    12345+ 
+
+/((?&gt;\d+))(\w)/
+    12345a
+    *** Failers
+    12345+ 
+
+/(?&gt;a+)b/
+    aaab
+
+/((?&gt;a+)b)/
+    aaab
+
+/(?&gt;(a+))b/
+    aaab
+
+/(?&gt;b)+/
+    aaabbbccc
+
+/(?&gt;a+|b+|c+)*c/
+    aaabbbbccccd
+
+/((?&gt;[^()]+)|\([^()]*\))+/
+    ((abc(ade)ufh()()x
+    
+/\(((?&gt;[^()]+)|\([^()]+\))+\)/ 
+    (abc)
+    (abc(def)xyz)
+    *** Failers
+    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
+
+/a(?-i)b/i
+    ab
+    Ab
+    *** Failers 
+    aB
+    AB
+        
+/(a (?x)b c)d e/
+    a bcd e
+    *** Failers
+    a b cd e
+    abcd e   
+    a bcde 

+/(a b(?x)c d (?-x)e f)/
+    a bcde f
+    *** Failers
+    abcdef  
+
+/(a(?i)b)c/
+    abc
+    aBc
+    *** Failers
+    abC
+    aBC  
+    Abc
+    ABc
+    ABC
+    AbC
+    
+/a(?i:b)c/
+    abc
+    aBc
+    *** Failers 
+    ABC
+    abC
+    aBC
+    
+/a(?i:b)*c/
+    aBc
+    aBBc
+    *** Failers 
+    aBC
+    aBBC
+    
+/a(?=b(?i)c)\w\wd/
+    abcd
+    abCd
+    *** Failers
+    aBCd
+    abcD     
+    
+/(?s-i:more.*than).*million/i
+    more than million
+    more than MILLION
+    more \n than Million 
+    *** Failers
+    MORE THAN MILLION    
+    more \n than \n million 
+
+/(?:(?s-i)more.*than).*million/i
+    more than million
+    more than MILLION
+    more \n than Million 
+    *** Failers
+    MORE THAN MILLION    
+    more \n than \n million 
+    
+/(?&gt;a(?i)b+)+c/ 
+    abc
+    aBbc
+    aBBc 
+    *** Failers
+    Abc
+    abAb    
+    abbC 
+    
+/(?=a(?i)b)\w\wc/
+    abc
+    aBc
+    *** Failers
+    Ab 
+    abC
+    aBC     
+    
+/(?&lt;=a(?i)b)(\w\w)c/
+    abxxc
+    aBxxc
+    *** Failers
+    Abxxc
+    ABxxc
+    abxxC      
+
+/(?:(a)|b)(?(1)A|B)/
+    aA
+    bB
+    *** Failers
+    aB
+    bA    
+
+/^(a)?(?(1)a|b)+$/
+    aa
+    b
+    bb  
+    *** Failers
+    ab   
+
+/^(?(?=abc)\w{3}:|\d\d)$/
+    abc:
+    12
+    *** Failers
+    123
+    xyz    
+
+/^(?(?!abc)\d\d|\w{3}:)$/
+    abc:
+    12
+    *** Failers
+    123
+    xyz    
+    
+/(?(?&lt;=foo)bar|cat)/
+    foobar
+    cat
+    fcat
+    focat   
+    *** Failers
+    foocat  
+
+/(?(?&lt;!foo)cat|bar)/
+    foobar
+    cat
+    fcat
+    focat   
+    *** Failers
+    foocat  
+
+/( \( )? [^()]+ (?(1) \) |) /x
+    abcd
+    (abcd)
+    the quick (abcd) fox
+    (abcd   
+
+/( \( )? [^()]+ (?(1) \) ) /x
+    abcd
+    (abcd)
+    the quick (abcd) fox
+    (abcd   
+
+/^(?(2)a|(1)(2))+$/
+    12
+    12a
+    12aa
+    *** Failers
+    1234    
+
+/((?i)blah)\s+\1/
+    blah blah
+    BLAH BLAH
+    Blah Blah
+    blaH blaH
+    *** Failers
+    blah BLAH
+    Blah blah      
+    blaH blah 
+
+/((?i)blah)\s+(?i:\1)/
+    blah blah
+    BLAH BLAH
+    Blah Blah
+    blaH blaH
+    blah BLAH
+    Blah blah      
+    blaH blah 
+
+/(?&gt;a*)*/
+    a
+    aa
+    aaaa
+    
+/(abc|)+/
+    abc
+    abcabc
+    abcabcabc
+    xyz      
+
+/([a]*)*/
+    a
+    aaaaa 

+/([ab]*)*/
+    a
+    b
+    ababab
+    aaaabcde
+    bbbb    

+/([^a]*)*/
+    b
+    bbbb
+    aaa   

+/([^ab]*)*/
+    cccc
+    abab  

+/([a]*?)*/
+    a
+    aaaa 

+/([ab]*?)*/
+    a
+    b
+    abab
+    baba   

+/([^a]*?)*/
+    b
+    bbbb
+    aaa   

+/([^ab]*?)*/
+    c
+    cccc
+    baba   

+/(?&gt;a*)*/
+    a
+    aaabcde 

+/((?&gt;a*))*/
+    aaaaa
+    aabbaa 

+/((?&gt;a*?))*/
+    aaaaa
+    aabbaa 
+
+/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
+    12-sep-98
+    12-09-98
+    *** Failers
+    sep-12-98
+        
+/(?&lt;=(foo))bar\1/
+    foobarfoo
+    foobarfootling 
+    *** Failers
+    foobar
+    barfoo   
+
+/(?i:saturday|sunday)/
+    saturday
+    sunday
+    Saturday
+    Sunday
+    SATURDAY
+    SUNDAY
+    SunDay
+    
+/(a(?i)bc|BB)x/
+    abcx
+    aBCx
+    bbx
+    BBx
+    *** Failers
+    abcX
+    aBCX
+    bbX
+    BBX               
+
+/^([ab](?i)[cd]|[ef])/
+    ac
+    aC
+    bD
+    elephant
+    Europe 
+    frog
+    France
+    *** Failers
+    Africa     
+
+/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
+    ab
+    aBd
+    xy
+    xY
+    zebra
+    Zambesi
+    *** Failers
+    aCD  
+    XY  
+
+/(?&lt;=foo\n)^bar/m
+    foo\nbar
+    *** Failers
+    bar
+    baz\nbar   
+
+/(?&lt;=(?&lt;!foo)bar)baz/
+    barbaz
+    barbarbaz 
+    koobarbaz 
+    *** Failers
+    baz
+    foobarbaz 
+
+/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
+/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
+/where it does set $1 to aa when matching aaaaaa./
+
+/^(a\1?){4}$/
+    a
+    aa
+    aaa
+    aaaa
+    aaaaa
+    aaaaaaa
+    aaaaaaaa
+    aaaaaaaaa
+    aaaaaaaaaa
+    aaaaaaaaaaa
+    aaaaaaaaaaaa
+    aaaaaaaaaaaaa
+    aaaaaaaaaaaaaa
+    aaaaaaaaaaaaaaa
+    aaaaaaaaaaaaaaaa               
+
+/^(a\1?)(a\1?)(a\2?)(a\3?)$/
+    a
+    aa
+    aaa
+    aaaa
+    aaaaa
+    aaaaaa
+    aaaaaaa
+    aaaaaaaa
+    aaaaaaaaa
+    aaaaaaaaaa
+    aaaaaaaaaaa
+    aaaaaaaaaaaa
+    aaaaaaaaaaaaa
+    aaaaaaaaaaaaaa
+    aaaaaaaaaaaaaaa
+    aaaaaaaaaaaaaaaa               
+
+/The following tests are taken from the Perl 5.005 test suite; some of them/
+/are compatible with 5.004, but I'd rather not have to sort them out./
+
+/abc/
+    abc
+    xabcy
+    ababc
+    *** Failers
+    xbc
+    axc
+    abx
+
+/ab*c/
+    abc
+
+/ab*bc/
+    abc
+    abbc
+    abbbbc
+
+/.{1}/
+    abbbbc
+
+/.{3,4}/
+    abbbbc
+
+/ab{0,}bc/
+    abbbbc
+
+/ab+bc/
+    abbc
+    *** Failers
+    abc
+    abq
+
+/ab{1,}bc/
+
+/ab+bc/
+    abbbbc
+
+/ab{1,}bc/
+    abbbbc
+
+/ab{1,3}bc/
+    abbbbc
+
+/ab{3,4}bc/
+    abbbbc
+
+/ab{4,5}bc/
+    *** Failers
+    abq
+    abbbbc
+
+/ab?bc/
+    abbc
+    abc
+
+/ab{0,1}bc/
+    abc
+
+/ab?bc/
+
+/ab?c/
+    abc
+
+/ab{0,1}c/
+    abc
+
+/^abc$/
+    abc
+    *** Failers
+    abbbbc
+    abcc
+
+/^abc/
+    abcc
+
+/^abc$/
+
+/abc$/
+    aabc
+    *** Failers
+    aabc
+    aabcd
+
+/^/
+    abc
+
+/$/
+    abc
+
+/a.c/
+    abc
+    axc
+
+/a.*c/
+    axyzc
+
+/a[bc]d/
+    abd
+    *** Failers
+    axyzd
+    abc
+
+/a[b-d]e/
+    ace
+
+/a[b-d]/
+    aac
+
+/a[-b]/
+    a-
+
+/a[b-]/
+    a-
+
+/a]/
+    a]
+
+/a[]]b/
+    a]b
+
+/a[^bc]d/
+    aed
+    *** Failers
+    abd
+    abd
+
+/a[^-b]c/
+    adc
+
+/a[^]b]c/
+    adc
+    *** Failers
+    a-c
+    a]c
+
+/\ba\b/
+    a-
+    -a
+    -a-
+
+/\by\b/
+    *** Failers
+    xy
+    yz
+    xyz
+
+/\Ba\B/
+    *** Failers
+    a-
+    -a
+    -a-
+
+/\By\b/
+    xy
+
+/\by\B/
+    yz
+
+/\By\B/
+    xyz
+
+/\w/
+    a
+
+/\W/
+    -
+    *** Failers
+    -
+    a
+
+/a\sb/
+    a b
+
+/a\Sb/
+    a-b
+    *** Failers
+    a-b
+    a b
+
+/\d/
+    1
+
+/\D/
+    -
+    *** Failers
+    -
+    1
+
+/[\w]/
+    a
+
+/[\W]/
+    -
+    *** Failers
+    -
+    a
+
+/a[\s]b/
+    a b
+
+/a[\S]b/
+    a-b
+    *** Failers
+    a-b
+    a b
+
+/[\d]/
+    1
+
+/[\D]/
+    -
+    *** Failers
+    -
+    1
+
+/ab|cd/
+    abc
+    abcd
+
+/()ef/
+    def
+
+/$b/
+
+/a\(b/
+    a(b
+
+/a\(*b/
+    ab
+    a((b
+
+/a\\b/
+    a\b
+
+/((a))/
+    abc
+
+/(a)b(c)/
+    abc
+
+/a+b+c/
+    aabbabc
+
+/a{1,}b{1,}c/
+    aabbabc
+
+/a.+?c/
+    abcabc
+
+/(a+|b)*/
+    ab
+
+/(a+|b){0,}/
+    ab
+
+/(a+|b)+/
+    ab
+
+/(a+|b){1,}/
+    ab
+
+/(a+|b)?/
+    ab
+
+/(a+|b){0,1}/
+    ab
+
+/[^ab]*/
+    cde
+
+/abc/
+    *** Failers
+    b
+    
+
+/a*/
+    
+
+/([abc])*d/
+    abbbcd
+
+/([abc])*bcd/
+    abcd
+
+/a|b|c|d|e/
+    e
+
+/(a|b|c|d|e)f/
+    ef
+
+/abcd*efg/
+    abcdefg
+
+/ab*/
+    xabyabbbz
+    xayabbbz
+
+/(ab|cd)e/
+    abcde
+
+/[abhgefdc]ij/
+    hij
+
+/^(ab|cd)e/
+
+/(abc|)ef/
+    abcdef
+
+/(a|b)c*d/
+    abcd
+
+/(ab|ab*)bc/
+    abc
+
+/a([bc]*)c*/
+    abc
+
+/a([bc]*)(c*d)/
+    abcd
+
+/a([bc]+)(c*d)/
+    abcd
+
+/a([bc]*)(c+d)/
+    abcd
+
+/a[bcd]*dcdcde/
+    adcdcde
+
+/a[bcd]+dcdcde/
+    *** Failers
+    abcde
+    adcdcde
+
+/(ab|a)b*c/
+    abc
+
+/((a)(b)c)(d)/
+    abcd
+
+/[a-zA-Z_][a-zA-Z0-9_]*/
+    alpha
+
+/^a(bc+|b[eh])g|.h$/
+    abh
+
+/(bc+d$|ef*g.|h?i(j|k))/
+    effgz
+    ij
+    reffgz
+    *** Failers
+    effg
+    bcdd
+
+/((((((((((a))))))))))/
+    a
+
+/((((((((((a))))))))))\10/
+    aa
+
+/(((((((((a)))))))))/
+    a
+
+/multiple words of text/
+    *** Failers
+    aa
+    uh-uh
+
+/multiple words/
+    multiple words, yeah
+
+/(.*)c(.*)/
+    abcde
+
+/\((.*), (.*)\)/
+    (a, b)
+
+/[k]/
+
+/abcd/
+    abcd
+
+/a(bc)d/
+    abcd
+
+/a[-]?c/
+    ac
+
+/(abc)\1/
+    abcabc
+
+/([a-c]*)\1/
+    abcabc
+
+/(a)|\1/
+    a
+    *** Failers
+    ab
+    x
+
+/(([a-c])b*?\2)*/
+    ababbbcbc
+
+/(([a-c])b*?\2){3}/
+    ababbbcbc
+
+/((\3|b)\2(a)x)+/
+    aaaxabaxbaaxbbax
+
+/((\3|b)\2(a)){2,}/
+    bbaababbabaaaaabbaaaabba
+
+/abc/i
+    ABC
+    XABCY
+    ABABC
+    *** Failers
+    aaxabxbaxbbx
+    XBC
+    AXC
+    ABX
+
+/ab*c/i
+    ABC
+
+/ab*bc/i
+    ABC
+    ABBC
+
+/ab*?bc/i
+    ABBBBC
+
+/ab{0,}?bc/i
+    ABBBBC
+
+/ab+?bc/i
+    ABBC
+
+/ab+bc/i
+    *** Failers
+    ABC
+    ABQ
+
+/ab{1,}bc/i
+
+/ab+bc/i
+    ABBBBC
+
+/ab{1,}?bc/i
+    ABBBBC
+
+/ab{1,3}?bc/i
+    ABBBBC
+
+/ab{3,4}?bc/i
+    ABBBBC
+
+/ab{4,5}?bc/i
+    *** Failers
+    ABQ
+    ABBBBC
+
+/ab??bc/i
+    ABBC
+    ABC
+
+/ab{0,1}?bc/i
+    ABC
+
+/ab??bc/i
+
+/ab??c/i
+    ABC
+
+/ab{0,1}?c/i
+    ABC
+
+/^abc$/i
+    ABC
+    *** Failers
+    ABBBBC
+    ABCC
+
+/^abc/i
+    ABCC
+
+/^abc$/i
+
+/abc$/i
+    AABC
+
+/^/i
+    ABC
+
+/$/i
+    ABC
+
+/a.c/i
+    ABC
+    AXC
+
+/a.*?c/i
+    AXYZC
+
+/a.*c/i
+    *** Failers
+    AABC
+    AXYZD
+
+/a[bc]d/i
+    ABD
+
+/a[b-d]e/i
+    ACE
+    *** Failers
+    ABC
+    ABD
+
+/a[b-d]/i
+    AAC
+
+/a[-b]/i
+    A-
+
+/a[b-]/i
+    A-
+
+/a]/i
+    A]
+
+/a[]]b/i
+    A]B
+
+/a[^bc]d/i
+    AED
+
+/a[^-b]c/i
+    ADC
+    *** Failers
+    ABD
+    A-C
+
+/a[^]b]c/i
+    ADC
+
+/ab|cd/i
+    ABC
+    ABCD
+
+/()ef/i
+    DEF
+
+/$b/i
+    *** Failers
+    A]C
+    B
+
+/a\(b/i
+    A(B
+
+/a\(*b/i
+    AB
+    A((B
+
+/a\\b/i
+    A\B
+
+/((a))/i
+    ABC
+
+/(a)b(c)/i
+    ABC
+
+/a+b+c/i
+    AABBABC
+
+/a{1,}b{1,}c/i
+    AABBABC
+
+/a.+?c/i
+    ABCABC
+
+/a.*?c/i
+    ABCABC
+
+/a.{0,5}?c/i
+    ABCABC
+
+/(a+|b)*/i
+    AB
+
+/(a+|b){0,}/i
+    AB
+
+/(a+|b)+/i
+    AB
+
+/(a+|b){1,}/i
+    AB
+
+/(a+|b)?/i
+    AB
+
+/(a+|b){0,1}/i
+    AB
+
+/(a+|b){0,1}?/i
+    AB
+
+/[^ab]*/i
+    CDE
+
+/abc/i
+
+/a*/i
+    
+
+/([abc])*d/i
+    ABBBCD
+
+/([abc])*bcd/i
+    ABCD
+
+/a|b|c|d|e/i
+    E
+
+/(a|b|c|d|e)f/i
+    EF
+
+/abcd*efg/i
+    ABCDEFG
+
+/ab*/i
+    XABYABBBZ
+    XAYABBBZ
+
+/(ab|cd)e/i
+    ABCDE
+
+/[abhgefdc]ij/i
+    HIJ
+
+/^(ab|cd)e/i
+    ABCDE
+
+/(abc|)ef/i
+    ABCDEF
+
+/(a|b)c*d/i
+    ABCD
+
+/(ab|ab*)bc/i
+    ABC
+
+/a([bc]*)c*/i
+    ABC
+
+/a([bc]*)(c*d)/i
+    ABCD
+
+/a([bc]+)(c*d)/i
+    ABCD
+
+/a([bc]*)(c+d)/i
+    ABCD
+
+/a[bcd]*dcdcde/i
+    ADCDCDE
+
+/a[bcd]+dcdcde/i
+
+/(ab|a)b*c/i
+    ABC
+
+/((a)(b)c)(d)/i
+    ABCD
+
+/[a-zA-Z_][a-zA-Z0-9_]*/i
+    ALPHA
+
+/^a(bc+|b[eh])g|.h$/i
+    ABH
+
+/(bc+d$|ef*g.|h?i(j|k))/i
+    EFFGZ
+    IJ
+    REFFGZ
+    *** Failers
+    ADCDCDE
+    EFFG
+    BCDD
+
+/((((((((((a))))))))))/i
+    A
+
+/((((((((((a))))))))))\10/i
+    AA
+
+/(((((((((a)))))))))/i
+    A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
+    A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
+    C
+
+/multiple words of text/i
+    *** Failers
+    AA
+    UH-UH
+
+/multiple words/i
+    MULTIPLE WORDS, YEAH
+
+/(.*)c(.*)/i
+    ABCDE
+
+/\((.*), (.*)\)/i
+    (A, B)
+
+/[k]/i
+
+/abcd/i
+    ABCD
+
+/a(bc)d/i
+    ABCD
+
+/a[-]?c/i
+    AC
+
+/(abc)\1/i
+    ABCABC
+
+/([a-c]*)\1/i
+    ABCABC
+
+/a(?!b)./
+    abad
+
+/a(?=d)./
+    abad
+
+/a(?=c|d)./
+    abad
+
+/a(?:b|c|d)(.)/
+    ace
+
+/a(?:b|c|d)*(.)/
+    ace
+
+/a(?:b|c|d)+?(.)/
+    ace
+    acdbcdbe
+
+/a(?:b|c|d)+(.)/
+    acdbcdbe
+
+/a(?:b|c|d){2}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){4,5}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){4,5}?(.)/
+    acdbcdbe
+
+/((foo)|(bar))*/
+    foobar
+
+/a(?:b|c|d){6,7}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){6,7}?(.)/
+    acdbcdbe
+
+/a(?:b|c|d){5,6}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){5,6}?(.)/
+    acdbcdbe
+
+/a(?:b|c|d){5,7}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){5,7}?(.)/
+    acdbcdbe
+
+/a(?:b|(c|e){1,2}?|d)+?(.)/
+    ace
+
+/^(.+)?B/
+    AB
+
+/^([^a-z])|(\^)$/
+    .
+
+/^[&lt;&gt;]&amp;/
+    &lt;&amp;OUT
+
+/^(a\1?){4}$/
+    aaaaaaaaaa
+    *** Failers
+    AB
+    aaaaaaaaa
+    aaaaaaaaaaa
+
+/^(a(?(1)\1)){4}$/
+    aaaaaaaaaa
+    *** Failers
+    aaaaaaaaa
+    aaaaaaaaaaa
+
+/(?:(f)(o)(o)|(b)(a)(r))*/
+    foobar
+
+/(?&lt;=a)b/
+    ab
+    *** Failers
+    cb
+    b
+
+/(?&lt;!c)b/
+    ab
+    b
+    b
+
+/(?:..)*a/
+    aba
+
+/(?:..)*?a/
+    aba
+
+/^(?:b|a(?=(.)))*\1/
+    abc
+
+/^(){3,5}/
+    abc
+
+/^(a+)*ax/
+    aax
+
+/^((a|b)+)*ax/
+    aax
+
+/^((a|bc)+)*ax/
+    aax
+
+/(a|x)*ab/
+    cab
+
+/(a)*ab/
+    cab
+
+/(?:(?i)a)b/
+    ab
+
+/((?i)a)b/
+    ab
+
+/(?:(?i)a)b/
+    Ab
+
+/((?i)a)b/
+    Ab
+
+/(?:(?i)a)b/
+    *** Failers
+    cb
+    aB
+
+/((?i)a)b/
+
+/(?i:a)b/
+    ab
+
+/((?i:a))b/
+    ab
+
+/(?i:a)b/
+    Ab
+
+/((?i:a))b/
+    Ab
+
+/(?i:a)b/
+    *** Failers
+    aB
+    aB
+
+/((?i:a))b/
+
+/(?:(?-i)a)b/i
+    ab
+
+/((?-i)a)b/i
+    ab
+
+/(?:(?-i)a)b/i
+    aB
+
+/((?-i)a)b/i
+    aB
+
+/(?:(?-i)a)b/i
+    *** Failers
+    aB
+    Ab
+
+/((?-i)a)b/i
+
+/(?:(?-i)a)b/i
+    aB
+
+/((?-i)a)b/i
+    aB
+
+/(?:(?-i)a)b/i
+    *** Failers
+    Ab
+    AB
+
+/((?-i)a)b/i
+
+/(?-i:a)b/i
+    ab
+
+/((?-i:a))b/i
+    ab
+
+/(?-i:a)b/i
+    aB
+
+/((?-i:a))b/i
+    aB
+
+/(?-i:a)b/i
+    *** Failers
+    AB
+    Ab
+
+/((?-i:a))b/i
+
+/(?-i:a)b/i
+    aB
+
+/((?-i:a))b/i
+    aB
+
+/(?-i:a)b/i
+    *** Failers
+    Ab
+    AB
+
+/((?-i:a))b/i
+
+/((?-i:a.))b/i
+    *** Failers
+    AB
+    a\nB
+
+/((?s-i:a.))b/i
+    a\nB
+
+/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
+    cabbbb
+
+/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
+    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+
+/(ab)\d\1/i
+    Ab4ab
+    ab4Ab
+
+/foo\w*\d{4}baz/
+    foobar1234baz
+
+/x(~~)*(?:(?:F)?)?/
+    x~~
+
+/^a(?#xxx){3}c/
+    aaac
+
+/^a (?#xxx) (?#yyy) {3}c/x
+    aaac
+
+/(?&lt;![cd])b/
+    *** Failers
+    B\nB
+    dbcb
+
+/(?&lt;![cd])[ab]/
+    dbaacb
+
+/(?&lt;!(c|d))b/
+
+/(?&lt;!(c|d))[ab]/
+    dbaacb
+
+/(?&lt;!cd)[ab]/
+    cdaccb
+
+/^(?:a?b?)*$/
+    \
+    a
+    ab
+    aaa   
+    *** Failers
+    dbcb
+    a--
+    aa-- 
+
+/((?s)^a(.))((?m)^b$)/
+    a\nb\nc\n
+
+/((?m)^b$)/
+    a\nb\nc\n
+
+/(?m)^b/
+    a\nb\n
+
+/(?m)^(b)/
+    a\nb\n
+
+/((?m)^b)/
+    a\nb\n
+
+/\n((?m)^b)/
+    a\nb\n
+
+/((?s).)c(?!.)/
+    a\nb\nc\n
+    a\nb\nc\n
+
+/((?s)b.)c(?!.)/
+    a\nb\nc\n
+    a\nb\nc\n
+
+/^b/
+
+/()^b/
+    *** Failers
+    a\nb\nc\n
+    a\nb\nc\n
+
+/((?m)^b)/
+    a\nb\nc\n
+
+/(?(1)a|b)/
+
+/(?(1)b|a)/
+    a
+
+/(x)?(?(1)a|b)/
+    *** Failers
+    a
+    a
+
+/(x)?(?(1)b|a)/
+    a
+
+/()?(?(1)b|a)/
+    a
+
+/()(?(1)b|a)/
+
+/()?(?(1)a|b)/
+    a
+
+/^(\()?blah(?(1)(\)))$/
+    (blah)
+    blah
+    *** Failers
+    a
+    blah)
+    (blah
+
+/^(\(+)?blah(?(1)(\)))$/
+    (blah)
+    blah
+    *** Failers
+    blah)
+    (blah
+
+/(?(?!a)a|b)/
+
+/(?(?!a)b|a)/
+    a
+
+/(?(?=a)b|a)/
+    *** Failers
+    a
+    a
+
+/(?(?=a)a|b)/
+    a
+
+/(?=(a+?))(\1ab)/
+    aaab
+
+/^(?=(a+?))\1ab/
+
+/(\w+:)+/
+    one:
+
+/$(?&lt;=^(a))/
+    a
+
+/(?=(a+?))(\1ab)/
+    aaab
+
+/^(?=(a+?))\1ab/
+    *** Failers
+    aaab
+    aaab
+
+/([\w:]+::)?(\w+)$/
+    abcd
+    xy:z:::abcd
+
+/^[^bcd]*(c+)/
+    aexycd
+
+/(a*)b+/
+    caab
+
+/([\w:]+::)?(\w+)$/
+    abcd
+    xy:z:::abcd
+    *** Failers
+    abcd:
+    abcd:
+
+/^[^bcd]*(c+)/
+    aexycd
+
+/(&gt;a+)ab/
+
+/(?&gt;a+)b/
+    aaab
+
+/([[:]+)/
+    a:[b]:
+
+/([[=]+)/
+    a=[b]=
+
+/([[.]+)/
+    a.[b].
+
+/((?&gt;a+)b)/
+    aaab
+
+/(?&gt;(a+))b/
+    aaab
+
+/((?&gt;[^()]+)|\([^()]*\))+/
+    ((abc(ade)ufh()()x
+
+/a\Z/
+    *** Failers
+    aaab
+    a\nb\n
+
+/b\Z/
+    a\nb\n
+
+/b\z/
+
+/b\Z/
+    a\nb
+
+/b\z/
+    a\nb
+    *** Failers
+    
+/^(?&gt;(?(1)\.|())[^\W_](?&gt;[a-z0-9-]*[^\W_])?)+$/
+    a
+    abc
+    a-b
+    0-9 
+    a.b
+    5.6.7  
+    the.quick.brown.fox
+    a100.b200.300c  
+    12-ab.1245 
+    *** Failers
+    \
+    .a
+    -a
+    a-
+    a.  
+    a_b 
+    a.-
+    a..  
+    ab..bc 
+    the.quick.brown.fox-
+    the.quick.brown.fox.
+    the.quick.brown.fox_
+    the.quick.brown.fox+       
+
+/(?&gt;.*)(?&lt;=(abcd|wxyz))/
+    alphabetabcd
+    endingwxyz
+    *** Failers
+    a rather long string that doesn't end with one of them
+
+/word (?&gt;(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
+    word cat dog elephant mussel cow horse canary baboon snake shark otherword
+    word cat dog elephant mussel cow horse canary baboon snake shark
+  
+/word (?&gt;[a-zA-Z0-9]+ ){0,30}otherword/
+    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+
+/(?&lt;=\d{3}(?!999))foo/
+    999foo
+    123999foo 
+    *** Failers
+    123abcfoo
+    
+/(?&lt;=(?!...999)\d{3})foo/
+    999foo
+    123999foo 
+    *** Failers
+    123abcfoo
+
+/(?&lt;=\d{3}(?!999)...)foo/
+    123abcfoo
+    123456foo 
+    *** Failers
+    123999foo  
+    
+/(?&lt;=\d{3}...)(?&lt;!999)foo/
+    123abcfoo   
+    123456foo 
+    *** Failers
+    123999foo  
+
+/&lt;a[\s]+href[\s]*=[\s]*          # find &lt;a href=
+ ([\&quot;\'])?                       # find single or double quote
+ (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
+                                 # quote, otherwise match up to next space
+/isx
+    &lt;a href=abcd xyz
+    &lt;a href=\&quot;abcd xyz pqr\&quot; cats
+    &lt;a href=\'abcd xyz pqr\' cats
+
+/&lt;a\s+href\s*=\s*                # find &lt;a href=
+ ([&quot;'])?                         # find single or double quote
+ (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
+                                 # quote, otherwise match up to next space
+/isx
+    &lt;a href=abcd xyz
+    &lt;a href=\&quot;abcd xyz pqr\&quot; cats
+    &lt;a href       =       \'abcd xyz pqr\' cats
+
+/&lt;a\s+href(?&gt;\s*)=(?&gt;\s*)        # find &lt;a href=
+ ([&quot;'])?                         # find single or double quote
+ (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
+                                 # quote, otherwise match up to next space
+/isx
+    &lt;a href=abcd xyz
+    &lt;a href=\&quot;abcd xyz pqr\&quot; cats
+    &lt;a href       =       \'abcd xyz pqr\' cats
+
+/((Z)+|A)*/
+    ZABCDEFG
+
+/(Z()|A)*/
+    ZABCDEFG
+
+/(Z(())|A)*/
+    ZABCDEFG
+
+/((?&gt;Z)+|A)*/
+    ZABCDEFG
+
+/((?&gt;)+|A)*/
+    ZABCDEFG
+
+/a*/g
+    abbab
+
+/^[a-\d]/
+    abcde
+    -things
+    0digit
+    *** Failers
+    bcdef    
+
+/^[\d-a]/
+    abcde
+    -things
+    0digit
+    *** Failers
+    bcdef    
+    
+/[[:space:]]+/
+    &gt; \x09\x0a\x0c\x0d\x0b&lt;
+     
+/[[:blank:]]+/
+    &gt; \x09\x0a\x0c\x0d\x0b&lt;
+     
+/[\s]+/
+    &gt; \x09\x0a\x0c\x0d\x0b&lt;
+     
+/\s+/
+    &gt; \x09\x0a\x0c\x0d\x0b&lt;
+     
+/a b/x
+    ab
+
+/(?!\A)x/m
+  a\nxb\n
+
+/(?!^)x/m
+  a\nxb\n
+
+/abc\Qabc\Eabc/
+    abcabcabc
+    
+/abc\Q(*+|\Eabc/
+    abc(*+|abc 
+
+/   abc\Q abc\Eabc/x
+    abc abcabc
+    *** Failers
+    abcabcabc  
+    
+/abc#comment
+    \Q#not comment
+    literal\E/x
+    abc#not comment\n    literal     
+
+/abc#comment
+    \Q#not comment
+    literal/x
+    abc#not comment\n    literal     
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment
+    /x
+    abc#not comment\n    literal     
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment/x
+    abc#not comment\n    literal     
+
+/\Qabc\$xyz\E/
+    abc\\\$xyz
+
+/\Qabc\E\$\Qxyz\E/
+    abc\$xyz
+
+/\Gabc/
+    abc
+    *** Failers
+    xyzabc  
+
+/\Gabc./g
+    abc1abc2xyzabc3
+
+/abc./g
+    abc1abc2xyzabc3 
+
+/a(?x: b c )d/
+    XabcdY
+    *** Failers 
+    Xa b c d Y 
+
+/((?x)x y z | a b c)/
+    XabcY
+    AxyzB 
+
+/(?i)AB(?-i)C/
+    XabCY
+    *** Failers
+    XabcY  
+
+/((?i)AB(?-i)C|D)E/
+    abCE
+    DE
+    *** Failers
+    abcE
+    abCe  
+    dE
+    De    
+
+/(.*)\d+\1/
+    abc123abc
+    abc123bc 
+
+/(.*)\d+\1/s
+    abc123abc
+    abc123bc 
+    
+/((.*))\d+\1/
+    abc123abc
+    abc123bc  
+
+/-- This tests for an IPv6 address in the form where it can have up to --/
+/-- eight components, one and only one of which is empty. This must be --/
+/-- an internal component. --/
+
+/^(?!:)                       # colon disallowed at start
+  (?:                         # start of item
+    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
+    (?(1)0 | () ) )           # if null previously matched, fail; else null
+    :                         # followed by colon
+  ){1,7}                      # end item; 1-7 of them required               
+  [0-9a-f]{1,4} $             # final hex number at end of string
+  (?(1)|.)                    # check that there was an empty component
+  /xi
+    a123::a123
+    a123:b342::abcd
+    a123:b342::324e:abcd
+    a123:ddde:b342::324e:abcd
+    a123:ddde:b342::324e:dcba:abcd
+    a123:ddde:9999:b342::324e:dcba:abcd
+    *** Failers
+    1:2:3:4:5:6:7:8
+    a123:bce:ddde:9999:b342::324e:dcba:abcd
+    a123::9999:b342::324e:dcba:abcd
+    abcde:2:3:4:5:6:7:8
+    ::1
+    abcd:fee0:123::   
+    :1
+    1:  
+
+/[z\Qa-d]\E]/
+    z
+    a
+    -
+    d
+    ] 
+    *** Failers
+    b     
+
+/[\z\C]/
+    z
+    C 
+    
+/\M/
+    M 
+    
+/(a+)*b/
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
+    
+/(?i)reg(?:ul(?:[aä]|ae)r|ex)/
+    REGular
+    regulaer
+    Regex  
+    regulär 
+
+/Åæåä[à-ÿÀ-ß]+/
+    Åæåäà
+    Åæåäÿ
+    ÅæåäÀ
+    Åæåäß
+
+/(?&lt;=Z)X./
+  \x84XAZXB
+
+/ab cd (?x) de fg/
+    ab cd defg
+
+/ab cd(?x) de fg/
+    ab cddefg
+    ** Failers 
+    abcddefg
+
+/(?&lt;![^f]oo)(bar)/
+    foobarX 
+    ** Failers 
+    boobarX
+
+/(?&lt;![^f])X/
+    offX
+    ** Failers
+    onyX  
+
+/(?&lt;=[^f])X/
+    onyX
+    ** Failers
+    offX 
+
+/^/mg
+    a\nb\nc\n
+    \ 
+    
+/(?&lt;=C\n)^/mg
+    A\nC\nC\n 
+
+/(?:(?(1)a|b)(X))+/
+    bXaX
+
+/(?:(?(1)\1a|b)(X|Y))+/
+    bXXaYYaY
+    bXYaXXaX  
+
+/()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
+    bXXaYYaY
+
+/[[,abc,]+]/
+    abc]
+    a,b]
+    [a,b,c]  
+
+/(?-x: )/x
+    A\x20B
+    
+&quot;(?x)(?-x: \s*#\s*)&quot;
+    A # B
+    ** Failers
+    #  
+
+&quot;(?x-is)(?:(?-ixs) \s*#\s*) include&quot;
+    A #include
+    ** Failers
+    A#include  
+    A #Include
+
+/a*b*\w/
+    aaabbbb
+    aaaa
+    a
+
+/a*b?\w/
+    aaabbbb
+    aaaa
+    a
+
+/a*b{0,4}\w/
+    aaabbbb
+    aaaa
+    a
+
+/a*b{0,}\w/
+    aaabbbb
+    aaaa
+    a
+    
+/a*\d*\w/
+    0a
+    a 
+    
+/a*b *\w/x
+    a 
+
+/a*b#comment
+  *\w/x
+    a 
+
+/a* b *\w/x
+    a 
+
+/^\w+=.*(\\\n.*)*/
+    abc=xyz\\\npqr
+
+/(?=(\w+))\1:/
+    abcd:
+
+/^(?=(\w+))\1:/
+    abcd:
+
+/^\Eabc/
+    abc
+    
+/^[\Eabc]/
+    a
+    ** Failers 
+    E 
+    
+/^[a-\Ec]/
+    b
+    ** Failers
+    -
+    E    
+
+/^[a\E\E-\Ec]/
+    b
+    ** Failers
+    -
+    E    
+
+/^[\E\Qa\E-\Qz\E]+/
+    b
+    ** Failers
+    -  
+    
+/^[a\Q]bc\E]/
+    a
+    ]
+    c
+    
+/^[a-\Q\E]/
+    a
+    -     
+
+/^(a()*)*/
+    aaaa
+
+/^(?:a(?:(?:))*)*/
+    aaaa
+
+/^(a()+)+/
+    aaaa
+
+/^(?:a(?:(?:))+)+/
+    aaaa
+
+/(a){0,3}(?(1)b|(c|))*D/
+    abbD
+    ccccD
+    D  
+
+/(a|)*\d/
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+
+/(?&gt;a|)*\d/
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+
+/(?:a|)*\d/
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+
+/\Z/g
+  abc\n
+  
+/^(?s)(?&gt;.*)(?&lt;!\n)/
+  abc
+  abc\n  
+
+/^(?![^\n]*\n\z)/
+  abc
+  abc\n 
+  
+/\z(?&lt;!\n)/
+  abc
+  abc\n  
+
+/(.*(.)?)*/
+    abcd
+
+/( (A | (?(1)0|) )*   )/x
+    abcd
+
+/( ( (?(1)0|) )*   )/x
+    abcd
+
+/(  (?(1)0|)*   )/x
+    abcd
+
+/ End of testinput1 /
</ins></span></pre></div>
<a id="trunkLayoutTestsfastregextestinput4"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regex/testinput4 (0 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regex/testinput4                                (rev 0)
+++ trunk/LayoutTests/fast/regex/testinput4        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -0,0 +1,538 @@
</span><ins>+/-- Do not use the \x{} construct except with patterns that have the --/
+/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/
+/-- that option is set. However, the latest Perls recognize them always. --/
+
+/a.b/8
+    acb
+    a\x7fb
+    a\x{100}b 
+    *** Failers
+    a\nb  
+
+/a(.{3})b/8
+    a\x{4000}xyb 
+    a\x{4000}\x7fyb 
+    a\x{4000}\x{100}yb 
+    *** Failers
+    a\x{4000}b 
+    ac\ncb 
+
+/a(.*?)(.)/
+    a\xc0\x88b
+
+/a(.*?)(.)/8
+    a\x{100}b
+
+/a(.*)(.)/
+    a\xc0\x88b
+
+/a(.*)(.)/8
+    a\x{100}b
+
+/a(.)(.)/
+    a\xc0\x92bcd
+
+/a(.)(.)/8
+    a\x{240}bcd
+
+/a(.?)(.)/
+    a\xc0\x92bcd
+
+/a(.?)(.)/8
+    a\x{240}bcd
+
+/a(.??)(.)/
+    a\xc0\x92bcd
+
+/a(.??)(.)/8
+    a\x{240}bcd
+
+/a(.{3})b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    *** Failers
+    a\x{1234}b 
+    ac\ncb 
+
+/a(.{3,})b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    axxxxbcdefghijb 
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+    *** Failers
+    a\x{1234}b 
+
+/a(.{3,}?)b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    axxxxbcdefghijb 
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+    *** Failers
+    a\x{1234}b 
+
+/a(.{3,5})b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    axxxxbcdefghijb 
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+    axbxxbcdefghijb 
+    axxxxxbcdefghijb 
+    *** Failers
+    a\x{1234}b 
+    axxxxxxbcdefghijb 
+
+/a(.{3,5}?)b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    axxxxbcdefghijb 
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+    axbxxbcdefghijb 
+    axxxxxbcdefghijb 
+    *** Failers
+    a\x{1234}b 
+    axxxxxxbcdefghijb 
+
+/^[a\x{c0}]/8
+    *** Failers
+    \x{100}
+
+/(?&lt;=aXb)cd/8
+    aXbcd
+
+/(?&lt;=a\x{100}b)cd/8
+    a\x{100}bcd
+
+/(?&lt;=a\x{100000}b)cd/8
+    a\x{100000}bcd
+    
+/(?:\x{100}){3}b/8
+    \x{100}\x{100}\x{100}b
+    *** Failers 
+    \x{100}\x{100}b
+
+/\x{ab}/8
+    \x{ab} 
+    \xc2\xab
+    *** Failers 
+    \x00{ab}
+
+/(?&lt;=(.))X/8
+    WXYZ
+    \x{256}XYZ 
+    *** Failers
+    XYZ 
+
+/X(\C{3})/8
+    X\x{1234}
+
+/X(\C{4})/8
+    X\x{1234}YZ
+    
+/X\C*/8
+    XYZabcdce
+    
+/X\C*?/8
+    XYZabcde
+    
+/X\C{3,5}/8
+    Xabcdefg   
+    X\x{1234} 
+    X\x{1234}YZ
+    X\x{1234}\x{512}  
+    X\x{1234}\x{512}YZ
+
+/X\C{3,5}?/8
+    Xabcdefg   
+    X\x{1234} 
+    X\x{1234}YZ
+    X\x{1234}\x{512}  
+
+/[^a]+/8g
+    bcd
+    \x{100}aY\x{256}Z 
+    
+/^[^a]{2}/8
+    \x{100}bc

+/^[^a]{2,}/8
+    \x{100}bcAa
+
+/^[^a]{2,}?/8
+    \x{100}bca
+
+/[^a]+/8ig
+    bcd
+    \x{100}aY\x{256}Z 
+    
+/^[^a]{2}/8i
+    \x{100}bc

+/^[^a]{2,}/8i
+    \x{100}bcAa
+
+/^[^a]{2,}?/8i
+    \x{100}bca
+
+/\x{100}{0,0}/8
+    abcd

+/\x{100}?/8
+    abcd
+    \x{100}\x{100} 
+
+/\x{100}{0,3}/8 
+    \x{100}\x{100} 
+    \x{100}\x{100}\x{100}\x{100} 
+    
+/\x{100}*/8
+    abce
+    \x{100}\x{100}\x{100}\x{100} 
+
+/\x{100}{1,1}/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+
+/\x{100}{1,3}/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+
+/\x{100}+/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+
+/\x{100}{3}/8
+    abcd\x{100}\x{100}\x{100}XX
+
+/\x{100}{3,5}/8
+    abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+
+/\x{100}{3,}/8
+    abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+
+/(?&lt;=a\x{100}{2}b)X/8+
+    Xyyya\x{100}\x{100}bXzzz
+
+/\D*/8
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/\D*/8
+  \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
 \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+
+/\D/8
+    1X2
+    1\x{100}2 
+  
+/&gt;\S/8
+    &gt; &gt;X Y
+    &gt; &gt;\x{100} Y
+  
+/\d/8
+    \x{100}3
+    
+/\s/8
+    \x{100} X
+    
+/\D+/8
+    12abcd34
+    *** Failers
+    1234  
+
+/\D{2,3}/8
+    12abcd34
+    12ab34
+    *** Failers  
+    1234
+    12a34  
+
+/\D{2,3}?/8
+    12abcd34
+    12ab34
+    *** Failers  
+    1234
+    12a34  
+
+/\d+/8
+    12abcd34
+    *** Failers
+
+/\d{2,3}/8
+    12abcd34
+    1234abcd
+    *** Failers  
+    1.4 
+
+/\d{2,3}?/8
+    12abcd34
+    1234abcd
+    *** Failers  
+    1.4 
+
+/\S+/8
+    12abcd34
+    *** Failers
+    \    \ 
+
+/\S{2,3}/8
+    12abcd34
+    1234abcd
+    *** Failers
+    \     \  
+
+/\S{2,3}?/8
+    12abcd34
+    1234abcd
+    *** Failers
+    \     \  
+
+/&gt;\s+&lt;/8+
+    12&gt;      &lt;34
+    *** Failers
+
+/&gt;\s{2,3}&lt;/8+
+    ab&gt;  &lt;cd
+    ab&gt;   &lt;ce
+    *** Failers
+    ab&gt;    &lt;cd 
+
+/&gt;\s{2,3}?&lt;/8+
+    ab&gt;  &lt;cd
+    ab&gt;   &lt;ce
+    *** Failers
+    ab&gt;    &lt;cd 
+
+/\w+/8
+    12      34
+    *** Failers
+    +++=*! 
+
+/\w{2,3}/8
+    ab  cd
+    abcd ce
+    *** Failers
+    a.b.c
+
+/\w{2,3}?/8
+    ab  cd
+    abcd ce
+    *** Failers
+    a.b.c
+
+/\W+/8
+    12====34
+    *** Failers
+    abcd 
+
+/\W{2,3}/8
+    ab====cd
+    ab==cd
+    *** Failers
+    a.b.c
+
+/\W{2,3}?/8
+    ab====cd
+    ab==cd
+    *** Failers
+    a.b.c
+
+/[\x{100}]/8
+    \x{100}
+    Z\x{100}
+    \x{100}Z
+    *** Failers 
+
+/[Z\x{100}]/8
+    Z\x{100}
+    \x{100}
+    \x{100}Z
+    *** Failers 
+
+/[\x{100}\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   *** Failers  
+
+/[\x{100}-\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{111}cd 
+   *** Failers  
+
+/[z-\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{111}cd 
+   abzcd
+   ab|cd  
+   *** Failers  
+
+/[Q\x{100}\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   Q? 
+   *** Failers  
+
+/[Q\x{100}-\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{111}cd 
+   Q? 
+   *** Failers  
+
+/[Qz-\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{111}cd 
+   abzcd
+   ab|cd  
+   Q? 
+   *** Failers  
+
+/[\x{100}\x{200}]{1,3}/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{200}\x{100}\x{200}\x{100}cd
+   *** Failers  
+
+/[\x{100}\x{200}]{1,3}?/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{200}\x{100}\x{200}\x{100}cd
+   *** Failers  
+
+/[Q\x{100}\x{200}]{1,3}/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{200}\x{100}\x{200}\x{100}cd
+   *** Failers  
+
+/[Q\x{100}\x{200}]{1,3}?/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{200}\x{100}\x{200}\x{100}cd
+   *** Failers  
+
+/(?&lt;=[\x{100}\x{200}])X/8
+    abc\x{200}X
+    abc\x{100}X 
+    *** Failers
+    X  
+
+/(?&lt;=[Q\x{100}\x{200}])X/8
+    abc\x{200}X
+    abc\x{100}X 
+    abQX 
+    *** Failers
+    X  
+
+/(?&lt;=[\x{100}\x{200}]{3})X/8
+    abc\x{100}\x{200}\x{100}X
+    *** Failers
+    abc\x{200}X
+    X  
+
+/[^\x{100}\x{200}]X/8
+    AX
+    \x{150}X
+    \x{500}X 
+    *** Failers
+    \x{100}X
+    \x{200}X   
+
+/[^Q\x{100}\x{200}]X/8
+    AX
+    \x{150}X
+    \x{500}X 
+    *** Failers
+    \x{100}X
+    \x{200}X   
+    QX 
+
+/[^\x{100}-\x{200}]X/8
+    AX
+    \x{500}X 
+    *** Failers
+    \x{100}X
+    \x{150}X
+    \x{200}X   
+
+/a\Cb/
+    aXb
+    a\nb
+  
+/a\Cb/8
+    aXb
+    a\nb
+    *** Failers 
+    a\x{100}b 
+
+/[z-\x{100}]/8i
+    z
+    Z 
+    \x{100}
+    *** Failers
+    \x{102}
+    y    
+
+/[\xFF]/
+    &gt;\xff&lt;
+
+/[\xff]/8
+    &gt;\x{ff}&lt;
+
+/[^\xFF]/
+    XYZ
+
+/[^\xff]/8
+    XYZ
+    \x{123} 
+
+/^[ac]*b/8
+  xb
+
+/^[ac\x{100}]*b/8
+  xb
+
+/^[^x]*b/8i
+  xb
+
+/^[^x]*b/8
+  xb
+  
+/^\d*b/8
+  xb 
+
+/(|a)/g8
+    catac
+    a\x{256}a 
+
+/^\x{85}$/8i
+    \x{85}
+
+/^ሴ/8
+    ሴ 
+
+/^\ሴ/8
+    ሴ 
+
+&quot;(?s)(.{1,5})&quot;8
+    abcdefg
+    ab
+
+/a*\x{100}*\w/8
+    a 
+
+/\S\S/8g
+    A\x{a3}BC
+    
+/\S{2}/8g
+    A\x{a3}BC
+    
+/\W\W/8g
+    +\x{a3}== 
+
+/\W{2}/8g
+    +\x{a3}== 
+
+/ End of testinput4 /
</ins></span></pre></div>
<a id="trunkLayoutTestsfastregextestoutput1"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regex/testoutput1 (0 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regex/testoutput1                                (rev 0)
+++ trunk/LayoutTests/fast/regex/testoutput1        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -0,0 +1,5782 @@
</span><ins>+/the quick brown fox/
+    the quick brown fox
+ 0: the quick brown fox
+    The quick brown FOX
+No match
+    What do you know about the quick brown fox?
+ 0: the quick brown fox
+    What do you know about THE QUICK BROWN FOX?
+No match
+
+/The quick brown fox/i
+    the quick brown fox
+ 0: the quick brown fox
+    The quick brown FOX
+ 0: The quick brown FOX
+    What do you know about the quick brown fox?
+ 0: the quick brown fox
+    What do you know about THE QUICK BROWN FOX?
+ 0: THE QUICK BROWN FOX
+
+/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
+    abcd\t\n\r\f\a\e9;\$\\?caxyz
+ 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
+
+/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
+    abxyzpqrrrabbxyyyypqAzz
+ 0: abxyzpqrrrabbxyyyypqAzz
+    abxyzpqrrrabbxyyyypqAzz
+ 0: abxyzpqrrrabbxyyyypqAzz
+    aabxyzpqrrrabbxyyyypqAzz
+ 0: aabxyzpqrrrabbxyyyypqAzz
+    aaabxyzpqrrrabbxyyyypqAzz
+ 0: aaabxyzpqrrrabbxyyyypqAzz
+    aaaabxyzpqrrrabbxyyyypqAzz
+ 0: aaaabxyzpqrrrabbxyyyypqAzz
+    abcxyzpqrrrabbxyyyypqAzz
+ 0: abcxyzpqrrrabbxyyyypqAzz
+    aabcxyzpqrrrabbxyyyypqAzz
+ 0: aabcxyzpqrrrabbxyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypAzz
+ 0: aaabcxyzpqrrrabbxyyyypAzz
+    aaabcxyzpqrrrabbxyyyypqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
+    aaaabcxyzpqrrrabbxyyyypqAzz
+ 0: aaaabcxyzpqrrrabbxyyyypqAzz
+    abxyzzpqrrrabbxyyyypqAzz
+ 0: abxyzzpqrrrabbxyyyypqAzz
+    aabxyzzzpqrrrabbxyyyypqAzz
+ 0: aabxyzzzpqrrrabbxyyyypqAzz
+    aaabxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaabxyzzzzpqrrrabbxyyyypqAzz
+    aaaabxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
+    abcxyzzpqrrrabbxyyyypqAzz
+ 0: abcxyzzpqrrrabbxyyyypqAzz
+    aabcxyzzzpqrrrabbxyyyypqAzz
+ 0: aabcxyzzzpqrrrabbxyyyypqAzz
+    aaabcxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyypqAzz
+ 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
+ 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypABzz
+ 0: aaabcxyzpqrrrabbxyyyypABzz
+    aaabcxyzpqrrrabbxyyyypABBzz
+ 0: aaabcxyzpqrrrabbxyyyypABBzz
+    &gt;&gt;&gt;aaabxyzpqrrrabbxyyyypqAzz
+ 0: aaabxyzpqrrrabbxyyyypqAzz
+    &gt;aaaabxyzpqrrrabbxyyyypqAzz
+ 0: aaaabxyzpqrrrabbxyyyypqAzz
+    &gt;&gt;&gt;&gt;abcxyzpqrrrabbxyyyypqAzz
+ 0: abcxyzpqrrrabbxyyyypqAzz
+    *** Failers
+No match
+    abxyzpqrrabbxyyyypqAzz
+No match
+    abxyzpqrrrrabbxyyyypqAzz
+No match
+    abxyzpqrrrabxyyyypqAzz
+No match
+    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
+No match
+    aaaabcxyzzzzpqrrrabbbxyyypqAzz
+No match
+    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
+No match
+
+/^(abc){1,2}zz/
+    abczz
+ 0: abczz
+ 1: abc
+    abcabczz
+ 0: abcabczz
+ 1: abc
+    *** Failers
+No match
+    zz
+No match
+    abcabcabczz
+No match
+    &gt;&gt;abczz
+No match
+
+/^(b+?|a){1,2}?c/
+    bc
+ 0: bc
+ 1: b
+    bbc
+ 0: bbc
+ 1: b
+    bbbc
+ 0: bbbc
+ 1: bb
+    bac
+ 0: bac
+ 1: a
+    bbac
+ 0: bbac
+ 1: a
+    aac
+ 0: aac
+ 1: a
+    abbbbbbbbbbbc
+ 0: abbbbbbbbbbbc
+ 1: bbbbbbbbbbb
+    bbbbbbbbbbbac
+ 0: bbbbbbbbbbbac
+ 1: a
+    *** Failers
+No match
+    aaac
+No match
+    abbbbbbbbbbbac
+No match
+
+/^(b+|a){1,2}c/
+    bc
+ 0: bc
+ 1: b
+    bbc
+ 0: bbc
+ 1: bb
+    bbbc
+ 0: bbbc
+ 1: bbb
+    bac
+ 0: bac
+ 1: a
+    bbac
+ 0: bbac
+ 1: a
+    aac
+ 0: aac
+ 1: a
+    abbbbbbbbbbbc
+ 0: abbbbbbbbbbbc
+ 1: bbbbbbbbbbb
+    bbbbbbbbbbbac
+ 0: bbbbbbbbbbbac
+ 1: a
+    *** Failers
+No match
+    aaac
+No match
+    abbbbbbbbbbbac
+No match
+
+/^(b+|a){1,2}?bc/
+    bbc
+ 0: bbc
+ 1: b
+
+/^(b*|ba){1,2}?bc/
+    babc
+ 0: babc
+ 1: ba
+    bbabc
+ 0: bbabc
+ 1: ba
+    bababc
+ 0: bababc
+ 1: ba
+    *** Failers
+No match
+    bababbc
+No match
+    babababc
+No match
+
+/^(ba|b*){1,2}?bc/
+    babc
+ 0: babc
+ 1: ba
+    bbabc
+ 0: bbabc
+ 1: ba
+    bababc
+ 0: bababc
+ 1: ba
+    *** Failers
+No match
+    bababbc
+No match
+    babababc
+No match
+
+/^\ca\cA\c[\c{\c:/
+    \x01\x01\e;z
+ 0: \x01\x01\x1b;z
+
+/^[ab\]cde]/
+    athing
+ 0: a
+    bthing
+ 0: b
+    ]thing
+ 0: ]
+    cthing
+ 0: c
+    dthing
+ 0: d
+    ething
+ 0: e
+    *** Failers
+No match
+    fthing
+No match
+    [thing
+No match
+    \\thing
+No match
+
+/^[]cde]/
+    ]thing
+ 0: ]
+    cthing
+ 0: c
+    dthing
+ 0: d
+    ething
+ 0: e
+    *** Failers
+No match
+    athing
+No match
+    fthing
+No match
+
+/^[^ab\]cde]/
+    fthing
+ 0: f
+    [thing
+ 0: [
+    \\thing
+ 0: \
+    *** Failers
+ 0: *
+    athing
+No match
+    bthing
+No match
+    ]thing
+No match
+    cthing
+No match
+    dthing
+No match
+    ething
+No match
+
+/^[^]cde]/
+    athing
+ 0: a
+    fthing
+ 0: f
+    *** Failers
+ 0: *
+    ]thing
+No match
+    cthing
+No match
+    dthing
+No match
+    ething
+No match
+
+/^\/
+    
+ 0: \x81
+
+/^ÿ/
+    ÿ
+ 0: \xff
+
+/^[0-9]+$/
+    0
+ 0: 0
+    1
+ 0: 1
+    2
+ 0: 2
+    3
+ 0: 3
+    4
+ 0: 4
+    5
+ 0: 5
+    6
+ 0: 6
+    7
+ 0: 7
+    8
+ 0: 8
+    9
+ 0: 9
+    10
+ 0: 10
+    100
+ 0: 100
+    *** Failers
+No match
+    abc
+No match
+
+/^.*nter/
+    enter
+ 0: enter
+    inter
+ 0: inter
+    uponter
+ 0: uponter
+
+/^xxx[0-9]+$/
+    xxx0
+ 0: xxx0
+    xxx1234
+ 0: xxx1234
+    *** Failers
+No match
+    xxx
+No match
+
+/^.+[0-9][0-9][0-9]$/
+    x123
+ 0: x123
+    xx123
+ 0: xx123
+    123456
+ 0: 123456
+    *** Failers
+No match
+    123
+No match
+    x1234
+ 0: x1234
+
+/^.+?[0-9][0-9][0-9]$/
+    x123
+ 0: x123
+    xx123
+ 0: xx123
+    123456
+ 0: 123456
+    *** Failers
+No match
+    123
+No match
+    x1234
+ 0: x1234
+
+/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
+    abc!pqr=apquxz.ixr.zzz.ac.uk
+ 0: abc!pqr=apquxz.ixr.zzz.ac.uk
+ 1: abc
+ 2: pqr
+    *** Failers
+No match
+    !pqr=apquxz.ixr.zzz.ac.uk
+No match
+    abc!=apquxz.ixr.zzz.ac.uk
+No match
+    abc!pqr=apquxz:ixr.zzz.ac.uk
+No match
+    abc!pqr=apquxz.ixr.zzz.ac.ukk
+No match
+
+/:/
+    Well, we need a colon: somewhere
+ 0: :
+    *** Fail if we don't
+No match
+
+/([\da-f:]+)$/i
+    0abc
+ 0: 0abc
+ 1: 0abc
+    abc
+ 0: abc
+ 1: abc
+    fed
+ 0: fed
+ 1: fed
+    E
+ 0: E
+ 1: E
+    ::
+ 0: ::
+ 1: ::
+    5f03:12C0::932e
+ 0: 5f03:12C0::932e
+ 1: 5f03:12C0::932e
+    fed def
+ 0: def
+ 1: def
+    Any old stuff
+ 0: ff
+ 1: ff
+    *** Failers
+No match
+    0zzz
+No match
+    gzzz
+No match
+    fed\x20
+No match
+    Any old rubbish
+No match
+
+/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
+    .1.2.3
+ 0: .1.2.3
+ 1: 1
+ 2: 2
+ 3: 3
+    A.12.123.0
+ 0: A.12.123.0
+ 1: 12
+ 2: 123
+ 3: 0
+    *** Failers
+No match
+    .1.2.3333
+No match
+    1.2.3
+No match
+    1234.2.3
+No match
+
+/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
+    1 IN SOA non-sp1 non-sp2(
+ 0: 1 IN SOA non-sp1 non-sp2(
+ 1: 1
+ 2: non-sp1
+ 3: non-sp2
+    1    IN    SOA    non-sp1    non-sp2   (
+ 0: 1    IN    SOA    non-sp1    non-sp2   (
+ 1: 1
+ 2: non-sp1
+ 3: non-sp2
+    *** Failers
+No match
+    1IN SOA non-sp1 non-sp2(
+No match
+
+/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
+    a.
+ 0: a.
+    Z.
+ 0: Z.
+    2.
+ 0: 2.
+    ab-c.pq-r.
+ 0: ab-c.pq-r.
+ 1: .pq-r
+    sxk.zzz.ac.uk.
+ 0: sxk.zzz.ac.uk.
+ 1: .uk
+    x-.y-.
+ 0: x-.y-.
+ 1: .y-
+    *** Failers
+No match
+    -abc.peq.
+No match
+
+/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
+    *.a
+ 0: *.a
+    *.b0-a
+ 0: *.b0-a
+ 1: 0-a
+    *.c3-b.c
+ 0: *.c3-b.c
+ 1: 3-b
+ 2: .c
+    *.c-a.b-c
+ 0: *.c-a.b-c
+ 1: -a
+ 2: .b-c
+ 3: -c
+    *** Failers
+No match
+    *.0
+No match
+    *.a-
+No match
+    *.a-b.c-
+No match
+    *.c-a.0-c
+No match
+
+/^(?=ab(de))(abd)(e)/
+    abde
+ 0: abde
+ 1: de
+ 2: abd
+ 3: e
+
+/^(?!(ab)de|x)(abd)(f)/
+    abdf
+ 0: abdf
+ 1: &lt;unset&gt;
+ 2: abd
+ 3: f
+
+/^(?=(ab(cd)))(ab)/
+    abcd
+ 0: ab
+ 1: abcd
+ 2: cd
+ 3: ab
+
+/^[\da-f](\.[\da-f])*$/i
+    a.b.c.d
+ 0: a.b.c.d
+ 1: .d
+    A.B.C.D
+ 0: A.B.C.D
+ 1: .D
+    a.b.c.1.2.3.C
+ 0: a.b.c.1.2.3.C
+ 1: .C
+
+/^\&quot;.*\&quot;\s*(;.*)?$/
+    \&quot;1234\&quot;
+ 0: &quot;1234&quot;
+    \&quot;abcd\&quot; ;
+ 0: &quot;abcd&quot; ;
+ 1: ;
+    \&quot;\&quot; ; rhubarb
+ 0: &quot;&quot; ; rhubarb
+ 1: ; rhubarb
+    *** Failers
+No match
+    \&quot;1234\&quot; : things
+No match
+
+/^$/
+    \
+ 0: 
+    *** Failers
+No match
+
+/   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
+    ab c
+ 0: ab c
+    *** Failers
+No match
+    abc
+No match
+    ab cde
+No match
+
+/(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
+    ab c
+ 0: ab c
+    *** Failers
+No match
+    abc
+No match
+    ab cde
+No match
+
+/^   a\ b[c ]d       $/x
+    a bcd
+ 0: a bcd
+    a b d
+ 0: a b d
+    *** Failers
+No match
+    abcd
+No match
+    ab d
+No match
+
+/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
+    abcdefhijklm
+ 0: abcdefhijklm
+ 1: abc
+ 2: bc
+ 3: c
+ 4: def
+ 5: ef
+ 6: f
+ 7: hij
+ 8: ij
+ 9: j
+10: klm
+11: lm
+12: m
+
+/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
+    abcdefhijklm
+ 0: abcdefhijklm
+ 1: bc
+ 2: c
+ 3: ef
+ 4: f
+ 5: ij
+ 6: j
+ 7: lm
+ 8: m
+
+/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
+    a+ Z0+\x08\n\x1d\x12
+ 0: a+ Z0+\x08\x0a\x1d\x12
+
+/^[.^$|()*+?{,}]+/
+    .^\$(*+)|{?,?}
+ 0: .^$(*+)|{?,?}
+
+/^a*\w/
+    z
+ 0: z
+    az
+ 0: az
+    aaaz
+ 0: aaaz
+    a
+ 0: a
+    aa
+ 0: aa
+    aaaa
+ 0: aaaa
+    a+
+ 0: a
+    aa+
+ 0: aa
+
+/^a*?\w/
+    z
+ 0: z
+    az
+ 0: a
+    aaaz
+ 0: a
+    a
+ 0: a
+    aa
+ 0: a
+    aaaa
+ 0: a
+    a+
+ 0: a
+    aa+
+ 0: a
+
+/^a+\w/
+    az
+ 0: az
+    aaaz
+ 0: aaaz
+    aa
+ 0: aa
+    aaaa
+ 0: aaaa
+    aa+
+ 0: aa
+
+/^a+?\w/
+    az
+ 0: az
+    aaaz
+ 0: aa
+    aa
+ 0: aa
+    aaaa
+ 0: aa
+    aa+
+ 0: aa
+
+/^\d{8}\w{2,}/
+    1234567890
+ 0: 1234567890
+    12345678ab
+ 0: 12345678ab
+    12345678__
+ 0: 12345678__
+    *** Failers
+No match
+    1234567
+No match
+
+/^[aeiou\d]{4,5}$/
+    uoie
+ 0: uoie
+    1234
+ 0: 1234
+    12345
+ 0: 12345
+    aaaaa
+ 0: aaaaa
+    *** Failers
+No match
+    123456
+No match
+
+/^[aeiou\d]{4,5}?/
+    uoie
+ 0: uoie
+    1234
+ 0: 1234
+    12345
+ 0: 1234
+    aaaaa
+ 0: aaaa
+    123456
+ 0: 1234
+
+/\A(abc|def)=(\1){2,3}\Z/
+    abc=abcabc
+ 0: abc=abcabc
+ 1: abc
+ 2: abc
+    def=defdefdef
+ 0: def=defdefdef
+ 1: def
+ 2: def
+    *** Failers
+No match
+    abc=defdef
+No match
+
+/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
+    abcdefghijkcda2
+ 0: abcdefghijkcda2
+ 1: a
+ 2: b
+ 3: c
+ 4: d
+ 5: e
+ 6: f
+ 7: g
+ 8: h
+ 9: i
+10: j
+11: k
+12: cd
+    abcdefghijkkkkcda2
+ 0: abcdefghijkkkkcda2
+ 1: a
+ 2: b
+ 3: c
+ 4: d
+ 5: e
+ 6: f
+ 7: g
+ 8: h
+ 9: i
+10: j
+11: k
+12: cd
+
+/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
+    cataract cataract23
+ 0: cataract cataract23
+ 1: cataract
+ 2: aract
+ 3: ract
+ 4: 
+ 5: 3
+    catatonic catatonic23
+ 0: catatonic catatonic23
+ 1: catatonic
+ 2: atonic
+ 3: tonic
+ 4: 
+ 5: 3
+    caterpillar caterpillar23
+ 0: caterpillar caterpillar23
+ 1: caterpillar
+ 2: erpillar
+ 3: &lt;unset&gt;
+ 4: 
+ 5: 3
+
+
+/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
+    From abcd  Mon Sep 01 12:33:02 1997
+ 0: From abcd  Mon Sep 01 12:33
+ 1: abcd
+
+/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
+    From abcd  Mon Sep 01 12:33:02 1997
+ 0: From abcd  Mon Sep 01 12:33
+ 1: Sep 
+    From abcd  Mon Sep  1 12:33:02 1997
+ 0: From abcd  Mon Sep  1 12:33
+ 1: Sep  
+    *** Failers
+No match
+    From abcd  Sep 01 12:33:02 1997
+No match
+
+/^12.34/s
+    12\n34
+ 0: 12\x0a34
+    12\r34
+ 0: 12\x0d34
+
+/\w+(?=\t)/
+    the quick brown\t fox
+ 0: brown
+
+/foo(?!bar)(.*)/
+    foobar is foolish see?
+ 0: foolish see?
+ 1: lish see?
+
+/(?:(?!foo)...|^.{0,2})bar(.*)/
+    foobar crowbar etc
+ 0: rowbar etc
+ 1:  etc
+    barrel
+ 0: barrel
+ 1: rel
+    2barrel
+ 0: 2barrel
+ 1: rel
+    A barrel
+ 0: A barrel
+ 1: rel
+
+/^(\D*)(?=\d)(?!123)/
+    abc456
+ 0: abc
+ 1: abc
+    *** Failers
+No match
+    abc123
+No match
+
+/^1234(?# test newlines
+  inside)/
+    1234
+ 0: 1234
+
+/^1234 #comment in extended re
+  /x
+    1234
+ 0: 1234
+
+/#rhubarb
+  abcd/x
+    abcd
+ 0: abcd
+
+/^abcd#rhubarb/x
+    abcd
+ 0: abcd
+
+/^(a)\1{2,3}(.)/
+    aaab
+ 0: aaab
+ 1: a
+ 2: b
+    aaaab
+ 0: aaaab
+ 1: a
+ 2: b
+    aaaaab
+ 0: aaaaa
+ 1: a
+ 2: a
+    aaaaaab
+ 0: aaaaa
+ 1: a
+ 2: a
+
+/(?!^)abc/
+    the abc
+ 0: abc
+    *** Failers
+No match
+    abc
+No match
+
+/(?=^)abc/
+    abc
+ 0: abc
+    *** Failers
+No match
+    the abc
+No match
+
+/^[ab]{1,3}(ab*|b)/
+    aabbbbb
+ 0: aabb
+ 1: b
+
+/^[ab]{1,3}?(ab*|b)/
+    aabbbbb
+ 0: aabbbbb
+ 1: abbbbb
+
+/^[ab]{1,3}?(ab*?|b)/
+    aabbbbb
+ 0: aa
+ 1: a
+
+/^[ab]{1,3}(ab*?|b)/
+    aabbbbb
+ 0: aabb
+ 1: b
+
+/abc\0def\00pqr\000xyz\0000AB/
+    abc\0def\00pqr\000xyz\0000AB
+ 0: abc\x00def\x00pqr\x00xyz\x000AB
+    abc456 abc\0def\00pqr\000xyz\0000ABCDE
+ 0: abc\x00def\x00pqr\x00xyz\x000AB
+
+/abc\x0def\x00pqr\x000xyz\x0000AB/
+    abc\x0def\x00pqr\x000xyz\x0000AB
+ 0: abc\x0def\x00pqr\x000xyz\x0000AB
+    abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
+ 0: abc\x0def\x00pqr\x000xyz\x0000AB
+
+/^[\000-\037]/
+    \0A
+ 0: \x00
+    \01B
+ 0: \x01
+    \037C
+ 0: \x1f
+
+/\0*/
+    \0\0\0\0
+ 0: \x00\x00\x00\x00
+
+/A\x0{2,3}Z/
+    The A\x0\x0Z
+ 0: A\x00\x00Z
+    An A\0\x0\0Z
+ 0: A\x00\x00\x00Z
+    *** Failers
+No match
+    A\0Z
+No match
+    A\0\x0\0\x0Z
+No match
+
+/^(cow|)\1(bell)/
+    cowcowbell
+ 0: cowcowbell
+ 1: cow
+ 2: bell
+    bell
+ 0: bell
+ 1: 
+ 2: bell
+    *** Failers
+No match
+    cowbell
+No match
+
+/^\s/
+    \040abc
+ 0:  
+    \x0cabc
+ 0: \x0c
+    \nabc
+ 0: \x0a
+    \rabc
+ 0: \x0d
+    \tabc
+ 0: \x09
+    *** Failers
+No match
+    abc
+No match
+
+/^a        b
+       c/x
+    abc
+ 0: abc
+
+/^(a|)\1*b/
+    ab
+ 0: ab
+ 1: a
+    aaaab
+ 0: aaaab
+ 1: a
+    b
+ 0: b
+ 1: 
+    *** Failers
+No match
+    acb
+No match
+
+/^(a|)\1+b/
+    aab
+ 0: aab
+ 1: a
+    aaaab
+ 0: aaaab
+ 1: a
+    b
+ 0: b
+ 1: 
+    *** Failers
+No match
+    ab
+No match
+
+/^(a|)\1?b/
+    ab
+ 0: ab
+ 1: a
+    aab
+ 0: aab
+ 1: a
+    b
+ 0: b
+ 1: 
+    *** Failers
+No match
+    acb
+No match
+
+/^(a|)\1{2}b/
+    aaab
+ 0: aaab
+ 1: a
+    b
+ 0: b
+ 1: 
+    *** Failers
+No match
+    ab
+No match
+    aab
+No match
+    aaaab
+No match
+
+/^(a|)\1{2,3}b/
+    aaab
+ 0: aaab
+ 1: a
+    aaaab
+ 0: aaaab
+ 1: a
+    b
+ 0: b
+ 1: 
+    *** Failers
+No match
+    ab
+No match
+    aab
+No match
+    aaaaab
+No match
+
+/ab{1,3}bc/
+    abbbbc
+ 0: abbbbc
+    abbbc
+ 0: abbbc
+    abbc
+ 0: abbc
+    *** Failers
+No match
+    abc
+No match
+    abbbbbc
+No match
+
+/([^.]*)\.([^:]*):[T ]+(.*)/
+    track1.title:TBlah blah blah
+ 0: track1.title:TBlah blah blah
+ 1: track1
+ 2: title
+ 3: Blah blah blah
+
+/([^.]*)\.([^:]*):[T ]+(.*)/i
+    track1.title:TBlah blah blah
+ 0: track1.title:TBlah blah blah
+ 1: track1
+ 2: title
+ 3: Blah blah blah
+
+/([^.]*)\.([^:]*):[t ]+(.*)/i
+    track1.title:TBlah blah blah
+ 0: track1.title:TBlah blah blah
+ 1: track1
+ 2: title
+ 3: Blah blah blah
+
+/^[W-c]+$/
+    WXY_^abc
+ 0: WXY_^abc
+    *** Failers
+No match
+    wxy
+No match
+
+/^[W-c]+$/i
+    WXY_^abc
+ 0: WXY_^abc
+    wxy_^ABC
+ 0: wxy_^ABC
+
+/^[\x3f-\x5F]+$/i
+    WXY_^abc
+ 0: WXY_^abc
+    wxy_^ABC
+ 0: wxy_^ABC
+
+/^abc$/m
+    abc
+ 0: abc
+    qqq\nabc
+ 0: abc
+    abc\nzzz
+ 0: abc
+    qqq\nabc\nzzz
+ 0: abc
+
+/^abc$/
+    abc
+ 0: abc
+    *** Failers
+No match
+    qqq\nabc
+No match
+    abc\nzzz
+No match
+    qqq\nabc\nzzz
+No match
+
+/\Aabc\Z/m
+    abc
+ 0: abc
+    abc\n 
+ 0: abc
+    *** Failers
+No match
+    qqq\nabc
+No match
+    abc\nzzz
+No match
+    qqq\nabc\nzzz
+No match
+    
+/\A(.)*\Z/s
+    abc\ndef
+ 0: abc\x0adef
+ 1: f
+
+/\A(.)*\Z/m
+    *** Failers
+ 0: *** Failers
+ 1: s
+    abc\ndef
+No match
+
+/(?:b)|(?::+)/
+    b::c
+ 0: b
+    c::b
+ 0: ::
+
+/[-az]+/
+    az-
+ 0: az-
+    *** Failers
+ 0: a
+    b
+No match
+
+/[az-]+/
+    za-
+ 0: za-
+    *** Failers
+ 0: a
+    b
+No match
+
+/[a\-z]+/
+    a-z
+ 0: a-z
+    *** Failers
+ 0: a
+    b
+No match
+
+/[a-z]+/
+    abcdxyz
+ 0: abcdxyz
+
+/[\d-]+/
+    12-34
+ 0: 12-34
+    *** Failers
+No match
+    aaa
+No match
+
+/[\d-z]+/
+    12-34z
+ 0: 12-34z
+    *** Failers
+No match
+    aaa
+No match
+
+/\x5c/
+    \\
+ 0: \
+
+/\x20Z/
+    the Zoo
+ 0:  Z
+    *** Failers
+No match
+    Zulu
+No match
+
+/(abc)\1/i
+    abcabc
+ 0: abcabc
+ 1: abc
+    ABCabc
+ 0: ABCabc
+ 1: ABC
+    abcABC
+ 0: abcABC
+ 1: abc
+
+/ab{3cd/
+    ab{3cd
+ 0: ab{3cd
+
+/ab{3,cd/
+    ab{3,cd
+ 0: ab{3,cd
+
+/ab{3,4a}cd/
+    ab{3,4a}cd
+ 0: ab{3,4a}cd
+
+/{4,5a}bc/
+    {4,5a}bc
+ 0: {4,5a}bc
+
+/abc$/
+    abc
+ 0: abc
+    abc\n
+ 0: abc
+    *** Failers
+No match
+    abc\ndef
+No match
+
+/(abc)\123/
+    abc\x53
+ 0: abcS
+ 1: abc
+
+/(abc)\223/
+    abc\x93
+ 0: abc\x93
+ 1: abc
+
+/(abc)\323/
+    abc\xd3
+ 0: abc\xd3
+ 1: abc
+
+/(abc)\100/
+    abc\x40
+ 0: abc@
+ 1: abc
+    abc\100
+ 0: abc@
+ 1: abc
+
+/(abc)\1000/
+    abc\x400
+ 0: abc@0
+ 1: abc
+    abc\x40\x30
+ 0: abc@0
+ 1: abc
+    abc\1000
+ 0: abc@0
+ 1: abc
+    abc\100\x30
+ 0: abc@0
+ 1: abc
+    abc\100\060
+ 0: abc@0
+ 1: abc
+    abc\100\60
+ 0: abc@0
+ 1: abc
+
+/abc\81/
+    abc\081
+ 0: abc\x0081
+    abc\0\x38\x31
+ 0: abc\x0081
+
+/abc\91/
+    abc\091
+ 0: abc\x0091
+    abc\0\x39\x31
+ 0: abc\x0091
+
+/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
+    abcdefghijkllS
+ 0: abcdefghijkllS
+ 1: a
+ 2: b
+ 3: c
+ 4: d
+ 5: e
+ 6: f
+ 7: g
+ 8: h
+ 9: i
+10: j
+11: k
+12: l
+
+/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
+    abcdefghijk\12S
+ 0: abcdefghijk\x0aS
+ 1: a
+ 2: b
+ 3: c
+ 4: d
+ 5: e
+ 6: f
+ 7: g
+ 8: h
+ 9: i
+10: j
+11: k
+
+/ab\idef/
+    abidef
+ 0: abidef
+
+/a{0}bc/
+    bc
+ 0: bc
+
+/(a|(bc)){0,0}?xyz/
+    xyz
+ 0: xyz
+
+/abc[\10]de/
+    abc\010de
+ 0: abc\x08de
+
+/abc[\1]de/
+    abc\1de
+ 0: abc\x01de
+
+/(abc)[\1]de/
+    abc\1de
+ 0: abc\x01de
+ 1: abc
+
+/(?s)a.b/
+    a\nb
+ 0: a\x0ab
+
+/^([^a])([^\b])([^c]*)([^d]{3,4})/
+    baNOTccccd
+ 0: baNOTcccc
+ 1: b
+ 2: a
+ 3: NOT
+ 4: cccc
+    baNOTcccd
+ 0: baNOTccc
+ 1: b
+ 2: a
+ 3: NOT
+ 4: ccc
+    baNOTccd
+ 0: baNOTcc
+ 1: b
+ 2: a
+ 3: NO
+ 4: Tcc
+    bacccd
+ 0: baccc
+ 1: b
+ 2: a
+ 3: 
+ 4: ccc
+    *** Failers
+ 0: *** Failers
+ 1: *
+ 2: *
+ 3: * Fail
+ 4: ers
+    anything
+No match
+    b\bc   
+No match
+    baccd
+No match
+
+/[^a]/
+    Abc
+ 0: A
+  
+/[^a]/i
+    Abc 
+ 0: b
+
+/[^a]+/
+    AAAaAbc
+ 0: AAA
+  
+/[^a]+/i
+    AAAaAbc 
+ 0: bc
+
+/[^a]+/
+    bbb\nccc
+ 0: bbb\x0accc
+   
+/[^k]$/
+    abc
+ 0: c
+    *** Failers
+ 0: s
+    abk   
+No match
+   
+/[^k]{2,3}$/
+    abc
+ 0: abc
+    kbc
+ 0: bc
+    kabc 
+ 0: abc
+    *** Failers
+ 0: ers
+    abk
+No match
+    akb
+No match
+    akk 
+No match
+
+/^\d{8,}\@.+[^k]$/
+    12345678\@a.b.c.d
+ 0: 12345678@a.b.c.d
+    123456789\@x.y.z
+ 0: 123456789@x.y.z
+    *** Failers
+No match
+    12345678\@x.y.uk
+No match
+    1234567\@a.b.c.d       
+No match
+
+/(a)\1{8,}/
+    aaaaaaaaa
+ 0: aaaaaaaaa
+ 1: a
+    aaaaaaaaaa
+ 0: aaaaaaaaaa
+ 1: a
+    *** Failers
+No match
+    aaaaaaa   
+No match
+
+/[^a]/
+    aaaabcd
+ 0: b
+    aaAabcd 
+ 0: A
+
+/[^a]/i
+    aaaabcd
+ 0: b
+    aaAabcd 
+ 0: b
+
+/[^az]/
+    aaaabcd
+ 0: b
+    aaAabcd 
+ 0: A
+
+/[^az]/i
+    aaaabcd
+ 0: b
+    aaAabcd 
+ 0: b
+
+/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366
 \367\370\371\372\373\374\375\376\377/
+ \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366
 \367\370\371\372\373\374\375\376\377
+ 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !&quot;#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
+
+/P[^*]TAIRE[^*]{1,6}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+ 0: PSTAIREISLL
+
+/P[^*]TAIRE[^*]{1,}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+ 0: PSTAIREISLL
+
+/(\.\d\d[1-9]?)\d+/
+    1.230003938
+ 0: .230003938
+ 1: .23
+    1.875000282   
+ 0: .875000282
+ 1: .875
+    1.235  
+ 0: .235
+ 1: .23
+                  
+/(\.\d\d((?=0)|\d(?=\d)))/
+    1.230003938      
+ 0: .23
+ 1: .23
+ 2: 
+    1.875000282
+ 0: .875
+ 1: .875
+ 2: 5
+    *** Failers 
+No match
+    1.235 
+No match
+    
+/a(?)b/
+    ab 
+ 0: ab

+/\b(foo)\s+(\w+)/i
+    Food is on the foo table
+ 0: foo table
+ 1: foo
+ 2: table
+    
+/foo(.*)bar/
+    The food is under the bar in the barn.
+ 0: food is under the bar in the bar
+ 1: d is under the bar in the 
+    
+/foo(.*?)bar/  
+    The food is under the bar in the barn.
+ 0: food is under the bar
+ 1: d is under the 
+
+/(.*)(\d*)/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 53147
+ 2: 
+    
+/(.*)(\d+)/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: 7

+/(.*?)(\d*)/
+    I have 2 numbers: 53147
+ 0: 
+ 1: 
+ 2: 
+
+/(.*?)(\d+)/
+    I have 2 numbers: 53147
+ 0: I have 2
+ 1: I have 
+ 2: 2
+
+/(.*)(\d+)$/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: 7
+
+/(.*?)(\d+)$/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 
+ 2: 53147
+
+/(.*)\b(\d+)$/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 
+ 2: 53147
+
+/(.*\D)(\d+)$/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 
+ 2: 53147
+
+/^\D*(?!123)/
+    ABC123
+ 0: AB
+     
+/^(\D*)(?=\d)(?!123)/
+    ABC445
+ 0: ABC
+ 1: ABC
+    *** Failers
+No match
+    ABC123
+No match
+    
+/^[W-]46]/
+    W46]789 
+ 0: W46]
+    -46]789
+ 0: -46]
+    *** Failers
+No match
+    Wall
+No match
+    Zebra
+No match
+    42
+No match
+    [abcd] 
+No match
+    ]abcd[
+No match
+       
+/^[W-\]46]/
+    W46]789 
+ 0: W
+    Wall
+ 0: W
+    Zebra
+ 0: Z
+    Xylophone  
+ 0: X
+    42
+ 0: 4
+    [abcd] 
+ 0: [
+    ]abcd[
+ 0: ]
+    \\backslash 
+ 0: \
+    *** Failers
+No match
+    -46]789
+No match
+    well
+No match
+    
+/\d\d\/\d\d\/\d\d\d\d/
+    01/01/2000
+ 0: 01/01/2000
+
+/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark otherword
+ 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
+  word cat dog elephant mussel cow horse canary baboon snake shark
+No match
+
+/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+No match
+
+/^(a){0,0}/
+    bcd
+ 0: 
+    abc
+ 0: 
+    aab     
+ 0: 
+
+/^(a){0,1}/
+    bcd
+ 0: 
+    abc
+ 0: a
+ 1: a
+    aab  
+ 0: a
+ 1: a
+
+/^(a){0,2}/
+    bcd
+ 0: 
+    abc
+ 0: a
+ 1: a
+    aab  
+ 0: aa
+ 1: a
+
+/^(a){0,3}/
+    bcd
+ 0: 
+    abc
+ 0: a
+ 1: a
+    aab
+ 0: aa
+ 1: a
+    aaa   
+ 0: aaa
+ 1: a
+
+/^(a){0,}/
+    bcd
+ 0: 
+    abc
+ 0: a
+ 1: a
+    aab
+ 0: aa
+ 1: a
+    aaa
+ 0: aaa
+ 1: a
+    aaaaaaaa    
+ 0: aaaaaaaa
+ 1: a
+
+/^(a){1,1}/
+    bcd
+No match
+    abc
+ 0: a
+ 1: a
+    aab  
+ 0: a
+ 1: a
+
+/^(a){1,2}/
+    bcd
+No match
+    abc
+ 0: a
+ 1: a
+    aab  
+ 0: aa
+ 1: a
+
+/^(a){1,3}/
+    bcd
+No match
+    abc
+ 0: a
+ 1: a
+    aab
+ 0: aa
+ 1: a
+    aaa   
+ 0: aaa
+ 1: a
+
+/^(a){1,}/
+    bcd
+No match
+    abc
+ 0: a
+ 1: a
+    aab
+ 0: aa
+ 1: a
+    aaa
+ 0: aaa
+ 1: a
+    aaaaaaaa    
+ 0: aaaaaaaa
+ 1: a
+
+/.*\.gif/
+    borfle\nbib.gif\nno
+ 0: bib.gif
+
+/.{0,}\.gif/
+    borfle\nbib.gif\nno
+ 0: bib.gif
+
+/.*\.gif/m
+    borfle\nbib.gif\nno
+ 0: bib.gif
+
+/.*\.gif/s
+    borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif
+
+/.*\.gif/ms
+    borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif
+    
+/.*$/
+    borfle\nbib.gif\nno
+ 0: no
+
+/.*$/m
+    borfle\nbib.gif\nno
+ 0: borfle
+
+/.*$/s
+    borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif\x0ano
+
+/.*$/ms
+    borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif\x0ano
+    
+/.*$/
+    borfle\nbib.gif\nno\n
+ 0: no
+
+/.*$/m
+    borfle\nbib.gif\nno\n
+ 0: borfle
+
+/.*$/s
+    borfle\nbib.gif\nno\n
+ 0: borfle\x0abib.gif\x0ano\x0a
+
+/.*$/ms
+    borfle\nbib.gif\nno\n
+ 0: borfle\x0abib.gif\x0ano\x0a
+    
+/(.*X|^B)/
+    abcde\n1234Xyz
+ 0: 1234X
+ 1: 1234X
+    BarFoo 
+ 0: B
+ 1: B
+    *** Failers
+No match
+    abcde\nBar  
+No match
+
+/(.*X|^B)/m
+    abcde\n1234Xyz
+ 0: 1234X
+ 1: 1234X
+    BarFoo 
+ 0: B
+ 1: B
+    abcde\nBar  
+ 0: B
+ 1: B
+
+/(.*X|^B)/s
+    abcde\n1234Xyz
+ 0: abcde\x0a1234X
+ 1: abcde\x0a1234X
+    BarFoo 
+ 0: B
+ 1: B
+    *** Failers
+No match
+    abcde\nBar  
+No match
+
+/(.*X|^B)/ms
+    abcde\n1234Xyz
+ 0: abcde\x0a1234X
+ 1: abcde\x0a1234X
+    BarFoo 
+ 0: B
+ 1: B
+    abcde\nBar  
+ 0: B
+ 1: B
+
+/(?s)(.*X|^B)/
+    abcde\n1234Xyz
+ 0: abcde\x0a1234X
+ 1: abcde\x0a1234X
+    BarFoo 
+ 0: B
+ 1: B
+    *** Failers 
+No match
+    abcde\nBar  
+No match
+
+/(?s:.*X|^B)/
+    abcde\n1234Xyz
+ 0: abcde\x0a1234X
+    BarFoo 
+ 0: B
+    *** Failers 
+No match
+    abcde\nBar  
+No match
+
+/^.*B/
+    **** Failers
+No match
+    abc\nB
+No match
+     
+/(?s)^.*B/
+    abc\nB
+ 0: abc\x0aB
+
+/(?m)^.*B/
+    abc\nB
+ 0: B
+     
+/(?ms)^.*B/
+    abc\nB
+ 0: abc\x0aB
+
+/(?ms)^B/
+    abc\nB
+ 0: B
+
+/(?s)B$/
+    B\n
+ 0: B
+
+/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
+    123456654321
+ 0: 123456654321
+  
+/^\d\d\d\d\d\d\d\d\d\d\d\d/
+    123456654321 
+ 0: 123456654321
+
+/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
+    123456654321
+ 0: 123456654321
+  
+/^[abc]{12}/
+    abcabcabcabc
+ 0: abcabcabcabc
+    
+/^[a-c]{12}/
+    abcabcabcabc
+ 0: abcabcabcabc
+    
+/^(a|b|c){12}/
+    abcabcabcabc 
+ 0: abcabcabcabc
+ 1: c
+
+/^[abcdefghijklmnopqrstuvwxy0123456789]/
+    n
+ 0: n
+    *** Failers 
+No match
+    z 
+No match
+
+/abcde{0,0}/
+    abcd
+ 0: abcd
+    *** Failers
+No match
+    abce  
+No match
+
+/ab[cd]{0,0}e/
+    abe
+ 0: abe
+    *** Failers
+No match
+    abcde 
+No match
+    
+/ab(c){0,0}d/
+    abd
+ 0: abd
+    *** Failers
+No match
+    abcd   
+No match
+
+/a(b*)/
+    a
+ 0: a
+ 1: 
+    ab
+ 0: ab
+ 1: b
+    abbbb
+ 0: abbbb
+ 1: bbbb
+    *** Failers
+ 0: a
+ 1: 
+    bbbbb    
+No match
+    
+/ab\d{0}e/
+    abe
+ 0: abe
+    *** Failers
+No match
+    ab1e   
+No match
+    
+/&quot;([^\\&quot;]+|\\.)*&quot;/
+    the \&quot;quick\&quot; brown fox
+ 0: &quot;quick&quot;
+ 1: quick
+    \&quot;the \\\&quot;quick\\\&quot; brown fox\&quot; 
+ 0: &quot;the \&quot;quick\&quot; brown fox&quot;
+ 1:  brown fox
+
+/.*?/g+
+    abc
+ 0: 
+ 0+ abc
+ 0: a
+ 0+ bc
+ 0: 
+ 0+ bc
+ 0: b
+ 0+ c
+ 0: 
+ 0+ c
+ 0: c
+ 0+ 
+ 0: 
+ 0+ 
+  
+/\b/g+
+    abc 
+ 0: 
+ 0+ abc
+ 0: 
+ 0+ 
+
+/\b/+g
+    abc 
+ 0: 
+ 0+ abc
+ 0: 
+ 0+ 
+
+//g
+    abc
+ 0: 
+ 0: 
+ 0: 
+ 0: 
+
+/&lt;tr([\w\W\s\d][^&lt;&gt;]{0,})&gt;&lt;TD([\w\W\s\d][^&lt;&gt;]{0,})&gt;([\d]{0,}\.)(.*)((&lt;BR&gt;([\w\W\s\d][^&lt;&gt;]{0,})|[\s]{0,}))&lt;\/a&gt;&lt;\/TD&gt;&lt;TD([\w\W\s\d][^&lt;&gt;]{0,})&gt;([\w\W\s\d][^&lt;&gt;]{0,})&lt;\/TD&gt;&lt;TD([\w\W\s\d][^&lt;&gt;]{0,})&gt;([\w\W\s\d][^&lt;&gt;]{0,})&lt;\/TD&gt;&lt;\/TR&gt;/is
+  &lt;TR BGCOLOR='#DBE9E9'&gt;&lt;TD align=left valign=top&gt;43.&lt;a href='joblist.cfm?JobID=94 6735&amp;Keyword='&gt;Word Processor&lt;BR&gt;(N-1286)&lt;/a&gt;&lt;/TD&gt;&lt;TD align=left valign=top&gt;Lega lstaff.com&lt;/TD&gt;&lt;TD align=left valign=top&gt;CA - Statewide&lt;/TD&gt;&lt;/TR&gt;
+ 0: &lt;TR BGCOLOR='#DBE9E9'&gt;&lt;TD align=left valign=top&gt;43.&lt;a href='joblist.cfm?JobID=94 6735&amp;Keyword='&gt;Word Processor&lt;BR&gt;(N-1286)&lt;/a&gt;&lt;/TD&gt;&lt;TD align=left valign=top&gt;Lega lstaff.com&lt;/TD&gt;&lt;TD align=left valign=top&gt;CA - Statewide&lt;/TD&gt;&lt;/TR&gt;
+ 1:  BGCOLOR='#DBE9E9'
+ 2:  align=left valign=top
+ 3: 43.
+ 4: &lt;a href='joblist.cfm?JobID=94 6735&amp;Keyword='&gt;Word Processor&lt;BR&gt;(N-1286)
+ 5: 
+ 6: 
+ 7: &lt;unset&gt;
+ 8:  align=left valign=top
+ 9: Lega lstaff.com
+10:  align=left valign=top
+11: CA - Statewide
+
+/a[^a]b/
+    acb
+ 0: acb
+    a\nb
+ 0: a\x0ab
+    
+/a.b/
+    acb
+ 0: acb
+    *** Failers 
+No match
+    a\nb   
+No match
+    
+/a[^a]b/s
+    acb
+ 0: acb
+    a\nb  
+ 0: a\x0ab
+    
+/a.b/s
+    acb
+ 0: acb
+    a\nb  
+ 0: a\x0ab
+
+/^(b+?|a){1,2}?c/
+    bac
+ 0: bac
+ 1: a
+    bbac
+ 0: bbac
+ 1: a
+    bbbac
+ 0: bbbac
+ 1: a
+    bbbbac
+ 0: bbbbac
+ 1: a
+    bbbbbac 
+ 0: bbbbbac
+ 1: a
+
+/^(b+|a){1,2}?c/
+    bac
+ 0: bac
+ 1: a
+    bbac
+ 0: bbac
+ 1: a
+    bbbac
+ 0: bbbac
+ 1: a
+    bbbbac
+ 0: bbbbac
+ 1: a
+    bbbbbac 
+ 0: bbbbbac
+ 1: a
+    
+/(?!\A)x/m
+    x\nb\n
+No match
+    a\bx\n  
+ 0: x
+    
+/\x0{ab}/
+    \0{ab} 
+ 0: \x00{ab}
+
+/(A|B)*?CD/
+    CD 
+ 0: CD
+    
+/(A|B)*CD/
+    CD 
+ 0: CD
+
+/(AB)*?\1/
+    ABABAB
+ 0: ABAB
+ 1: AB
+
+/(AB)*\1/
+    ABABAB
+ 0: ABABAB
+ 1: AB
+    
+/(?&lt;!bar)foo/
+    foo
+ 0: foo
+    catfood
+ 0: foo
+    arfootle
+ 0: foo
+    rfoosh
+ 0: foo
+    *** Failers
+No match
+    barfoo
+No match
+    towbarfoo
+No match
+
+/\w{3}(?&lt;!bar)foo/
+    catfood
+ 0: catfoo
+    *** Failers
+No match
+    foo
+No match
+    barfoo
+No match
+    towbarfoo
+No match
+
+/(?&lt;=(foo)a)bar/
+    fooabar
+ 0: bar
+ 1: foo
+    *** Failers
+No match
+    bar
+No match
+    foobbar
+No match
+      
+/\Aabc\z/m
+    abc
+ 0: abc
+    *** Failers
+No match
+    abc\n   
+No match
+    qqq\nabc
+No match
+    abc\nzzz
+No match
+    qqq\nabc\nzzz
+No match
+
+&quot;(?&gt;.*/)foo&quot;
+    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
+No match
+
+&quot;(?&gt;.*/)foo&quot;
+    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
+ 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
+
+/(?&gt;(\.\d\d[1-9]?))\d+/
+    1.230003938
+ 0: .230003938
+ 1: .23
+    1.875000282
+ 0: .875000282
+ 1: .875
+    *** Failers 
+No match
+    1.235 
+No match
+
+/^((?&gt;\w+)|(?&gt;\s+))*$/
+    now is the time for all good men to come to the aid of the party
+ 0: now is the time for all good men to come to the aid of the party
+ 1: party
+    *** Failers
+No match
+    this is not a line with only words and spaces!
+No match
+    
+/(\d+)(\w)/
+    12345a
+ 0: 12345a
+ 1: 12345
+ 2: a
+    12345+ 
+ 0: 12345
+ 1: 1234
+ 2: 5
+
+/((?&gt;\d+))(\w)/
+    12345a
+ 0: 12345a
+ 1: 12345
+ 2: a
+    *** Failers
+No match
+    12345+ 
+No match
+
+/(?&gt;a+)b/
+    aaab
+ 0: aaab
+
+/((?&gt;a+)b)/
+    aaab
+ 0: aaab
+ 1: aaab
+
+/(?&gt;(a+))b/
+    aaab
+ 0: aaab
+ 1: aaa
+
+/(?&gt;b)+/
+    aaabbbccc
+ 0: bbb
+
+/(?&gt;a+|b+|c+)*c/
+    aaabbbbccccd
+ 0: aaabbbbc
+
+/((?&gt;[^()]+)|\([^()]*\))+/
+    ((abc(ade)ufh()()x
+ 0: abc(ade)ufh()()x
+ 1: x
+    
+/\(((?&gt;[^()]+)|\([^()]+\))+\)/ 
+    (abc)
+ 0: (abc)
+ 1: abc
+    (abc(def)xyz)
+ 0: (abc(def)xyz)
+ 1: xyz
+    *** Failers
+No match
+    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
+No match
+
+/a(?-i)b/i
+    ab
+ 0: ab
+    Ab
+ 0: Ab
+    *** Failers 
+No match
+    aB
+No match
+    AB
+No match
+        
+/(a (?x)b c)d e/
+    a bcd e
+ 0: a bcd e
+ 1: a bc
+    *** Failers
+No match
+    a b cd e
+No match
+    abcd e   
+No match
+    a bcde 
+No match

+/(a b(?x)c d (?-x)e f)/
+    a bcde f
+ 0: a bcde f
+ 1: a bcde f
+    *** Failers
+No match
+    abcdef  
+No match
+
+/(a(?i)b)c/
+    abc
+ 0: abc
+ 1: ab
+    aBc
+ 0: aBc
+ 1: aB
+    *** Failers
+No match
+    abC
+No match
+    aBC  
+No match
+    Abc
+No match
+    ABc
+No match
+    ABC
+No match
+    AbC
+No match
+    
+/a(?i:b)c/
+    abc
+ 0: abc
+    aBc
+ 0: aBc
+    *** Failers 
+No match
+    ABC
+No match
+    abC
+No match
+    aBC
+No match
+    
+/a(?i:b)*c/
+    aBc
+ 0: aBc
+    aBBc
+ 0: aBBc
+    *** Failers 
+No match
+    aBC
+No match
+    aBBC
+No match
+    
+/a(?=b(?i)c)\w\wd/
+    abcd
+ 0: abcd
+    abCd
+ 0: abCd
+    *** Failers
+No match
+    aBCd
+No match
+    abcD     
+No match
+    
+/(?s-i:more.*than).*million/i
+    more than million
+ 0: more than million
+    more than MILLION
+ 0: more than MILLION
+    more \n than Million 
+ 0: more \x0a than Million
+    *** Failers
+No match
+    MORE THAN MILLION    
+No match
+    more \n than \n million 
+No match
+
+/(?:(?s-i)more.*than).*million/i
+    more than million
+ 0: more than million
+    more than MILLION
+ 0: more than MILLION
+    more \n than Million 
+ 0: more \x0a than Million
+    *** Failers
+No match
+    MORE THAN MILLION    
+No match
+    more \n than \n million 
+No match
+    
+/(?&gt;a(?i)b+)+c/ 
+    abc
+ 0: abc
+    aBbc
+ 0: aBbc
+    aBBc 
+ 0: aBBc
+    *** Failers
+No match
+    Abc
+No match
+    abAb    
+No match
+    abbC 
+No match
+    
+/(?=a(?i)b)\w\wc/
+    abc
+ 0: abc
+    aBc
+ 0: aBc
+    *** Failers
+No match
+    Ab 
+No match
+    abC
+No match
+    aBC     
+No match
+    
+/(?&lt;=a(?i)b)(\w\w)c/
+    abxxc
+ 0: xxc
+ 1: xx
+    aBxxc
+ 0: xxc
+ 1: xx
+    *** Failers
+No match
+    Abxxc
+No match
+    ABxxc
+No match
+    abxxC      
+No match
+
+/(?:(a)|b)(?(1)A|B)/
+    aA
+ 0: aA
+ 1: a
+    bB
+ 0: bB
+    *** Failers
+No match
+    aB
+No match
+    bA    
+No match
+
+/^(a)?(?(1)a|b)+$/
+    aa
+ 0: aa
+ 1: a
+    b
+ 0: b
+    bb  
+ 0: bb
+    *** Failers
+No match
+    ab   
+No match
+
+/^(?(?=abc)\w{3}:|\d\d)$/
+    abc:
+ 0: abc:
+    12
+ 0: 12
+    *** Failers
+No match
+    123
+No match
+    xyz    
+No match
+
+/^(?(?!abc)\d\d|\w{3}:)$/
+    abc:
+ 0: abc:
+    12
+ 0: 12
+    *** Failers
+No match
+    123
+No match
+    xyz    
+No match
+    
+/(?(?&lt;=foo)bar|cat)/
+    foobar
+ 0: bar
+    cat
+ 0: cat
+    fcat
+ 0: cat
+    focat   
+ 0: cat
+    *** Failers
+No match
+    foocat  
+No match
+
+/(?(?&lt;!foo)cat|bar)/
+    foobar
+ 0: bar
+    cat
+ 0: cat
+    fcat
+ 0: cat
+    focat   
+ 0: cat
+    *** Failers
+No match
+    foocat  
+No match
+
+/( \( )? [^()]+ (?(1) \) |) /x
+    abcd
+ 0: abcd
+    (abcd)
+ 0: (abcd)
+ 1: (
+    the quick (abcd) fox
+ 0: the quick 
+    (abcd   
+ 0: abcd
+
+/( \( )? [^()]+ (?(1) \) ) /x
+    abcd
+ 0: abcd
+    (abcd)
+ 0: (abcd)
+ 1: (
+    the quick (abcd) fox
+ 0: the quick 
+    (abcd   
+ 0: abcd
+
+/^(?(2)a|(1)(2))+$/
+    12
+ 0: 12
+ 1: 1
+ 2: 2
+    12a
+ 0: 12a
+ 1: 1
+ 2: 2
+    12aa
+ 0: 12aa
+ 1: 1
+ 2: 2
+    *** Failers
+No match
+    1234    
+No match
+
+/((?i)blah)\s+\1/
+    blah blah
+ 0: blah blah
+ 1: blah
+    BLAH BLAH
+ 0: BLAH BLAH
+ 1: BLAH
+    Blah Blah
+ 0: Blah Blah
+ 1: Blah
+    blaH blaH
+ 0: blaH blaH
+ 1: blaH
+    *** Failers
+No match
+    blah BLAH
+No match
+    Blah blah      
+No match
+    blaH blah 
+No match
+
+/((?i)blah)\s+(?i:\1)/
+    blah blah
+ 0: blah blah
+ 1: blah
+    BLAH BLAH
+ 0: BLAH BLAH
+ 1: BLAH
+    Blah Blah
+ 0: Blah Blah
+ 1: Blah
+    blaH blaH
+ 0: blaH blaH
+ 1: blaH
+    blah BLAH
+ 0: blah BLAH
+ 1: blah
+    Blah blah      
+ 0: Blah blah
+ 1: Blah
+    blaH blah 
+ 0: blaH blah
+ 1: blaH
+
+/(?&gt;a*)*/
+    a
+ 0: a
+    aa
+ 0: aa
+    aaaa
+ 0: aaaa
+    
+/(abc|)+/
+    abc
+ 0: abc
+ 1: 
+    abcabc
+ 0: abcabc
+ 1: 
+    abcabcabc
+ 0: abcabcabc
+ 1: 
+    xyz      
+ 0: 
+ 1: 
+
+/([a]*)*/
+    a
+ 0: a
+ 1: 
+    aaaaa 
+ 0: aaaaa
+ 1: 

+/([ab]*)*/
+    a
+ 0: a
+ 1: 
+    b
+ 0: b
+ 1: 
+    ababab
+ 0: ababab
+ 1: 
+    aaaabcde
+ 0: aaaab
+ 1: 
+    bbbb    
+ 0: bbbb
+ 1: 

+/([^a]*)*/
+    b
+ 0: b
+ 1: 
+    bbbb
+ 0: bbbb
+ 1: 
+    aaa   
+ 0: 
+ 1: 

+/([^ab]*)*/
+    cccc
+ 0: cccc
+ 1: 
+    abab  
+ 0: 
+ 1: 

+/([a]*?)*/
+    a
+ 0: 
+ 1: 
+    aaaa 
+ 0: 
+ 1: 

+/([ab]*?)*/
+    a
+ 0: 
+ 1: 
+    b
+ 0: 
+ 1: 
+    abab
+ 0: 
+ 1: 
+    baba   
+ 0: 
+ 1: 

+/([^a]*?)*/
+    b
+ 0: 
+ 1: 
+    bbbb
+ 0: 
+ 1: 
+    aaa   
+ 0: 
+ 1: 

+/([^ab]*?)*/
+    c
+ 0: 
+ 1: 
+    cccc
+ 0: 
+ 1: 
+    baba   
+ 0: 
+ 1: 

+/(?&gt;a*)*/
+    a
+ 0: a
+    aaabcde 
+ 0: aaa

+/((?&gt;a*))*/
+    aaaaa
+ 0: aaaaa
+ 1: 
+    aabbaa 
+ 0: aa
+ 1: 

+/((?&gt;a*?))*/
+    aaaaa
+ 0: 
+ 1: 
+    aabbaa 
+ 0: 
+ 1: 
+
+/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
+    12-sep-98
+ 0: 12-sep-98
+    12-09-98
+ 0: 12-09-98
+    *** Failers
+No match
+    sep-12-98
+No match
+        
+/(?&lt;=(foo))bar\1/
+    foobarfoo
+ 0: barfoo
+ 1: foo
+    foobarfootling 
+ 0: barfoo
+ 1: foo
+    *** Failers
+No match
+    foobar
+No match
+    barfoo   
+No match
+
+/(?i:saturday|sunday)/
+    saturday
+ 0: saturday
+    sunday
+ 0: sunday
+    Saturday
+ 0: Saturday
+    Sunday
+ 0: Sunday
+    SATURDAY
+ 0: SATURDAY
+    SUNDAY
+ 0: SUNDAY
+    SunDay
+ 0: SunDay
+    
+/(a(?i)bc|BB)x/
+    abcx
+ 0: abcx
+ 1: abc
+    aBCx
+ 0: aBCx
+ 1: aBC
+    bbx
+ 0: bbx
+ 1: bb
+    BBx
+ 0: BBx
+ 1: BB
+    *** Failers
+No match
+    abcX
+No match
+    aBCX
+No match
+    bbX
+No match
+    BBX               
+No match
+
+/^([ab](?i)[cd]|[ef])/
+    ac
+ 0: ac
+ 1: ac
+    aC
+ 0: aC
+ 1: aC
+    bD
+ 0: bD
+ 1: bD
+    elephant
+ 0: e
+ 1: e
+    Europe 
+ 0: E
+ 1: E
+    frog
+ 0: f
+ 1: f
+    France
+ 0: F
+ 1: F
+    *** Failers
+No match
+    Africa     
+No match
+
+/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
+    ab
+ 0: ab
+ 1: ab
+    aBd
+ 0: aBd
+ 1: aBd
+    xy
+ 0: xy
+ 1: xy
+    xY
+ 0: xY
+ 1: xY
+    zebra
+ 0: z
+ 1: z
+    Zambesi
+ 0: Z
+ 1: Z
+    *** Failers
+No match
+    aCD  
+No match
+    XY  
+No match
+
+/(?&lt;=foo\n)^bar/m
+    foo\nbar
+ 0: bar
+    *** Failers
+No match
+    bar
+No match
+    baz\nbar   
+No match
+
+/(?&lt;=(?&lt;!foo)bar)baz/
+    barbaz
+ 0: baz
+    barbarbaz 
+ 0: baz
+    koobarbaz 
+ 0: baz
+    *** Failers
+No match
+    baz
+No match
+    foobarbaz 
+No match
+
+/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
+/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
+No match
+/where it does set $1 to aa when matching aaaaaa./
+No match
+
+/^(a\1?){4}$/
+    a
+No match
+    aa
+No match
+    aaa
+No match
+    aaaa
+ 0: aaaa
+ 1: a
+    aaaaa
+ 0: aaaaa
+ 1: a
+    aaaaaaa
+ 0: aaaaaaa
+ 1: a
+    aaaaaaaa
+No match
+    aaaaaaaaa
+No match
+    aaaaaaaaaa
+ 0: aaaaaaaaaa
+ 1: aaaa
+    aaaaaaaaaaa
+No match
+    aaaaaaaaaaaa
+No match
+    aaaaaaaaaaaaa
+No match
+    aaaaaaaaaaaaaa
+No match
+    aaaaaaaaaaaaaaa
+No match
+    aaaaaaaaaaaaaaaa               
+No match
+
+/^(a\1?)(a\1?)(a\2?)(a\3?)$/
+    a
+No match
+    aa
+No match
+    aaa
+No match
+    aaaa
+ 0: aaaa
+ 1: a
+ 2: a
+ 3: a
+ 4: a
+    aaaaa
+ 0: aaaaa
+ 1: a
+ 2: aa
+ 3: a
+ 4: a
+    aaaaaa
+ 0: aaaaaa
+ 1: a
+ 2: aa
+ 3: a
+ 4: aa
+    aaaaaaa
+ 0: aaaaaaa
+ 1: a
+ 2: aa
+ 3: aaa
+ 4: a
+    aaaaaaaa
+No match
+    aaaaaaaaa
+No match
+    aaaaaaaaaa
+ 0: aaaaaaaaaa
+ 1: a
+ 2: aa
+ 3: aaa
+ 4: aaaa
+    aaaaaaaaaaa
+No match
+    aaaaaaaaaaaa
+No match
+    aaaaaaaaaaaaa
+No match
+    aaaaaaaaaaaaaa
+No match
+    aaaaaaaaaaaaaaa
+No match
+    aaaaaaaaaaaaaaaa               
+No match
+
+/The following tests are taken from the Perl 5.005 test suite; some of them/
+/are compatible with 5.004, but I'd rather not have to sort them out./
+No match
+
+/abc/
+    abc
+ 0: abc
+    xabcy
+ 0: abc
+    ababc
+ 0: abc
+    *** Failers
+No match
+    xbc
+No match
+    axc
+No match
+    abx
+No match
+
+/ab*c/
+    abc
+ 0: abc
+
+/ab*bc/
+    abc
+ 0: abc
+    abbc
+ 0: abbc
+    abbbbc
+ 0: abbbbc
+
+/.{1}/
+    abbbbc
+ 0: a
+
+/.{3,4}/
+    abbbbc
+ 0: abbb
+
+/ab{0,}bc/
+    abbbbc
+ 0: abbbbc
+
+/ab+bc/
+    abbc
+ 0: abbc
+    *** Failers
+No match
+    abc
+No match
+    abq
+No match
+
+/ab{1,}bc/
+
+/ab+bc/
+    abbbbc
+ 0: abbbbc
+
+/ab{1,}bc/
+    abbbbc
+ 0: abbbbc
+
+/ab{1,3}bc/
+    abbbbc
+ 0: abbbbc
+
+/ab{3,4}bc/
+    abbbbc
+ 0: abbbbc
+
+/ab{4,5}bc/
+    *** Failers
+No match
+    abq
+No match
+    abbbbc
+No match
+
+/ab?bc/
+    abbc
+ 0: abbc
+    abc
+ 0: abc
+
+/ab{0,1}bc/
+    abc
+ 0: abc
+
+/ab?bc/
+
+/ab?c/
+    abc
+ 0: abc
+
+/ab{0,1}c/
+    abc
+ 0: abc
+
+/^abc$/
+    abc
+ 0: abc
+    *** Failers
+No match
+    abbbbc
+No match
+    abcc
+No match
+
+/^abc/
+    abcc
+ 0: abc
+
+/^abc$/
+
+/abc$/
+    aabc
+ 0: abc
+    *** Failers
+No match
+    aabc
+ 0: abc
+    aabcd
+No match
+
+/^/
+    abc
+ 0: 
+
+/$/
+    abc
+ 0: 
+
+/a.c/
+    abc
+ 0: abc
+    axc
+ 0: axc
+
+/a.*c/
+    axyzc
+ 0: axyzc
+
+/a[bc]d/
+    abd
+ 0: abd
+    *** Failers
+No match
+    axyzd
+No match
+    abc
+No match
+
+/a[b-d]e/
+    ace
+ 0: ace
+
+/a[b-d]/
+    aac
+ 0: ac
+
+/a[-b]/
+    a-
+ 0: a-
+
+/a[b-]/
+    a-
+ 0: a-
+
+/a]/
+    a]
+ 0: a]
+
+/a[]]b/
+    a]b
+ 0: a]b
+
+/a[^bc]d/
+    aed
+ 0: aed
+    *** Failers
+No match
+    abd
+No match
+    abd
+No match
+
+/a[^-b]c/
+    adc
+ 0: adc
+
+/a[^]b]c/
+    adc
+ 0: adc
+    *** Failers
+No match
+    a-c
+ 0: a-c
+    a]c
+No match
+
+/\ba\b/
+    a-
+ 0: a
+    -a
+ 0: a
+    -a-
+ 0: a
+
+/\by\b/
+    *** Failers
+No match
+    xy
+No match
+    yz
+No match
+    xyz
+No match
+
+/\Ba\B/
+    *** Failers
+ 0: a
+    a-
+No match
+    -a
+No match
+    -a-
+No match
+
+/\By\b/
+    xy
+ 0: y
+
+/\by\B/
+    yz
+ 0: y
+
+/\By\B/
+    xyz
+ 0: y
+
+/\w/
+    a
+ 0: a
+
+/\W/
+    -
+ 0: -
+    *** Failers
+ 0: *
+    -
+ 0: -
+    a
+No match
+
+/a\sb/
+    a b
+ 0: a b
+
+/a\Sb/
+    a-b
+ 0: a-b
+    *** Failers
+No match
+    a-b
+ 0: a-b
+    a b
+No match
+
+/\d/
+    1
+ 0: 1
+
+/\D/
+    -
+ 0: -
+    *** Failers
+ 0: *
+    -
+ 0: -
+    1
+No match
+
+/[\w]/
+    a
+ 0: a
+
+/[\W]/
+    -
+ 0: -
+    *** Failers
+ 0: *
+    -
+ 0: -
+    a
+No match
+
+/a[\s]b/
+    a b
+ 0: a b
+
+/a[\S]b/
+    a-b
+ 0: a-b
+    *** Failers
+No match
+    a-b
+ 0: a-b
+    a b
+No match
+
+/[\d]/
+    1
+ 0: 1
+
+/[\D]/
+    -
+ 0: -
+    *** Failers
+ 0: *
+    -
+ 0: -
+    1
+No match
+
+/ab|cd/
+    abc
+ 0: ab
+    abcd
+ 0: ab
+
+/()ef/
+    def
+ 0: ef
+ 1: 
+
+/$b/
+
+/a\(b/
+    a(b
+ 0: a(b
+
+/a\(*b/
+    ab
+ 0: ab
+    a((b
+ 0: a((b
+
+/a\\b/
+    a\b
+No match
+
+/((a))/
+    abc
+ 0: a
+ 1: a
+ 2: a
+
+/(a)b(c)/
+    abc
+ 0: abc
+ 1: a
+ 2: c
+
+/a+b+c/
+    aabbabc
+ 0: abc
+
+/a{1,}b{1,}c/
+    aabbabc
+ 0: abc
+
+/a.+?c/
+    abcabc
+ 0: abc
+
+/(a+|b)*/
+    ab
+ 0: ab
+ 1: b
+
+/(a+|b){0,}/
+    ab
+ 0: ab
+ 1: b
+
+/(a+|b)+/
+    ab
+ 0: ab
+ 1: b
+
+/(a+|b){1,}/
+    ab
+ 0: ab
+ 1: b
+
+/(a+|b)?/
+    ab
+ 0: a
+ 1: a
+
+/(a+|b){0,1}/
+    ab
+ 0: a
+ 1: a
+
+/[^ab]*/
+    cde
+ 0: cde
+
+/abc/
+    *** Failers
+No match
+    b
+No match
+    
+
+/a*/
+    
+
+/([abc])*d/
+    abbbcd
+ 0: abbbcd
+ 1: c
+
+/([abc])*bcd/
+    abcd
+ 0: abcd
+ 1: a
+
+/a|b|c|d|e/
+    e
+ 0: e
+
+/(a|b|c|d|e)f/
+    ef
+ 0: ef
+ 1: e
+
+/abcd*efg/
+    abcdefg
+ 0: abcdefg
+
+/ab*/
+    xabyabbbz
+ 0: ab
+    xayabbbz
+ 0: a
+
+/(ab|cd)e/
+    abcde
+ 0: cde
+ 1: cd
+
+/[abhgefdc]ij/
+    hij
+ 0: hij
+
+/^(ab|cd)e/
+
+/(abc|)ef/
+    abcdef
+ 0: ef
+ 1: 
+
+/(a|b)c*d/
+    abcd
+ 0: bcd
+ 1: b
+
+/(ab|ab*)bc/
+    abc
+ 0: abc
+ 1: a
+
+/a([bc]*)c*/
+    abc
+ 0: abc
+ 1: bc
+
+/a([bc]*)(c*d)/
+    abcd
+ 0: abcd
+ 1: bc
+ 2: d
+
+/a([bc]+)(c*d)/
+    abcd
+ 0: abcd
+ 1: bc
+ 2: d
+
+/a([bc]*)(c+d)/
+    abcd
+ 0: abcd
+ 1: b
+ 2: cd
+
+/a[bcd]*dcdcde/
+    adcdcde
+ 0: adcdcde
+
+/a[bcd]+dcdcde/
+    *** Failers
+No match
+    abcde
+No match
+    adcdcde
+No match
+
+/(ab|a)b*c/
+    abc
+ 0: abc
+ 1: ab
+
+/((a)(b)c)(d)/
+    abcd
+ 0: abcd
+ 1: abc
+ 2: a
+ 3: b
+ 4: d
+
+/[a-zA-Z_][a-zA-Z0-9_]*/
+    alpha
+ 0: alpha
+
+/^a(bc+|b[eh])g|.h$/
+    abh
+ 0: bh
+
+/(bc+d$|ef*g.|h?i(j|k))/
+    effgz
+ 0: effgz
+ 1: effgz
+    ij
+ 0: ij
+ 1: ij
+ 2: j
+    reffgz
+ 0: effgz
+ 1: effgz
+    *** Failers
+No match
+    effg
+No match
+    bcdd
+No match
+
+/((((((((((a))))))))))/
+    a
+ 0: a
+ 1: a
+ 2: a
+ 3: a
+ 4: a
+ 5: a
+ 6: a
+ 7: a
+ 8: a
+ 9: a
+10: a
+
+/((((((((((a))))))))))\10/
+    aa
+ 0: aa
+ 1: a
+ 2: a
+ 3: a
+ 4: a
+ 5: a
+ 6: a
+ 7: a
+ 8: a
+ 9: a
+10: a
+
+/(((((((((a)))))))))/
+    a
+ 0: a
+ 1: a
+ 2: a
+ 3: a
+ 4: a
+ 5: a
+ 6: a
+ 7: a
+ 8: a
+ 9: a
+
+/multiple words of text/
+    *** Failers
+No match
+    aa
+No match
+    uh-uh
+No match
+
+/multiple words/
+    multiple words, yeah
+ 0: multiple words
+
+/(.*)c(.*)/
+    abcde
+ 0: abcde
+ 1: ab
+ 2: de
+
+/\((.*), (.*)\)/
+    (a, b)
+ 0: (a, b)
+ 1: a
+ 2: b
+
+/[k]/
+
+/abcd/
+    abcd
+ 0: abcd
+
+/a(bc)d/
+    abcd
+ 0: abcd
+ 1: bc
+
+/a[-]?c/
+    ac
+ 0: ac
+
+/(abc)\1/
+    abcabc
+ 0: abcabc
+ 1: abc
+
+/([a-c]*)\1/
+    abcabc
+ 0: abcabc
+ 1: abc
+
+/(a)|\1/
+    a
+ 0: a
+ 1: a
+    *** Failers
+ 0: a
+ 1: a
+    ab
+ 0: a
+ 1: a
+    x
+No match
+
+/(([a-c])b*?\2)*/
+    ababbbcbc
+ 0: ababb
+ 1: bb
+ 2: b
+
+/(([a-c])b*?\2){3}/
+    ababbbcbc
+ 0: ababbbcbc
+ 1: cbc
+ 2: c
+
+/((\3|b)\2(a)x)+/
+    aaaxabaxbaaxbbax
+ 0: bbax
+ 1: bbax
+ 2: b
+ 3: a
+
+/((\3|b)\2(a)){2,}/
+    bbaababbabaaaaabbaaaabba
+ 0: bbaaaabba
+ 1: bba
+ 2: b
+ 3: a
+
+/abc/i
+    ABC
+ 0: ABC
+    XABCY
+ 0: ABC
+    ABABC
+ 0: ABC
+    *** Failers
+No match
+    aaxabxbaxbbx
+No match
+    XBC
+No match
+    AXC
+No match
+    ABX
+No match
+
+/ab*c/i
+    ABC
+ 0: ABC
+
+/ab*bc/i
+    ABC
+ 0: ABC
+    ABBC
+ 0: ABBC
+
+/ab*?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{0,}?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab+?bc/i
+    ABBC
+ 0: ABBC
+
+/ab+bc/i
+    *** Failers
+No match
+    ABC
+No match
+    ABQ
+No match
+
+/ab{1,}bc/i
+
+/ab+bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{1,}?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{1,3}?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{3,4}?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{4,5}?bc/i
+    *** Failers
+No match
+    ABQ
+No match
+    ABBBBC
+No match
+
+/ab??bc/i
+    ABBC
+ 0: ABBC
+    ABC
+ 0: ABC
+
+/ab{0,1}?bc/i
+    ABC
+ 0: ABC
+
+/ab??bc/i
+
+/ab??c/i
+    ABC
+ 0: ABC
+
+/ab{0,1}?c/i
+    ABC
+ 0: ABC
+
+/^abc$/i
+    ABC
+ 0: ABC
+    *** Failers
+No match
+    ABBBBC
+No match
+    ABCC
+No match
+
+/^abc/i
+    ABCC
+ 0: ABC
+
+/^abc$/i
+
+/abc$/i
+    AABC
+ 0: ABC
+
+/^/i
+    ABC
+ 0: 
+
+/$/i
+    ABC
+ 0: 
+
+/a.c/i
+    ABC
+ 0: ABC
+    AXC
+ 0: AXC
+
+/a.*?c/i
+    AXYZC
+ 0: AXYZC
+
+/a.*c/i
+    *** Failers
+No match
+    AABC
+ 0: AABC
+    AXYZD
+No match
+
+/a[bc]d/i
+    ABD
+ 0: ABD
+
+/a[b-d]e/i
+    ACE
+ 0: ACE
+    *** Failers
+No match
+    ABC
+No match
+    ABD
+No match
+
+/a[b-d]/i
+    AAC
+ 0: AC
+
+/a[-b]/i
+    A-
+ 0: A-
+
+/a[b-]/i
+    A-
+ 0: A-
+
+/a]/i
+    A]
+ 0: A]
+
+/a[]]b/i
+    A]B
+ 0: A]B
+
+/a[^bc]d/i
+    AED
+ 0: AED
+
+/a[^-b]c/i
+    ADC
+ 0: ADC
+    *** Failers
+No match
+    ABD
+No match
+    A-C
+No match
+
+/a[^]b]c/i
+    ADC
+ 0: ADC
+
+/ab|cd/i
+    ABC
+ 0: AB
+    ABCD
+ 0: AB
+
+/()ef/i
+    DEF
+ 0: EF
+ 1: 
+
+/$b/i
+    *** Failers
+No match
+    A]C
+No match
+    B
+No match
+
+/a\(b/i
+    A(B
+ 0: A(B
+
+/a\(*b/i
+    AB
+ 0: AB
+    A((B
+ 0: A((B
+
+/a\\b/i
+    A\B
+No match
+
+/((a))/i
+    ABC
+ 0: A
+ 1: A
+ 2: A
+
+/(a)b(c)/i
+    ABC
+ 0: ABC
+ 1: A
+ 2: C
+
+/a+b+c/i
+    AABBABC
+ 0: ABC
+
+/a{1,}b{1,}c/i
+    AABBABC
+ 0: ABC
+
+/a.+?c/i
+    ABCABC
+ 0: ABC
+
+/a.*?c/i
+    ABCABC
+ 0: ABC
+
+/a.{0,5}?c/i
+    ABCABC
+ 0: ABC
+
+/(a+|b)*/i
+    AB
+ 0: AB
+ 1: B
+
+/(a+|b){0,}/i
+    AB
+ 0: AB
+ 1: B
+
+/(a+|b)+/i
+    AB
+ 0: AB
+ 1: B
+
+/(a+|b){1,}/i
+    AB
+ 0: AB
+ 1: B
+
+/(a+|b)?/i
+    AB
+ 0: A
+ 1: A
+
+/(a+|b){0,1}/i
+    AB
+ 0: A
+ 1: A
+
+/(a+|b){0,1}?/i
+    AB
+ 0: 
+
+/[^ab]*/i
+    CDE
+ 0: CDE
+
+/abc/i
+
+/a*/i
+    
+
+/([abc])*d/i
+    ABBBCD
+ 0: ABBBCD
+ 1: C
+
+/([abc])*bcd/i
+    ABCD
+ 0: ABCD
+ 1: A
+
+/a|b|c|d|e/i
+    E
+ 0: E
+
+/(a|b|c|d|e)f/i
+    EF
+ 0: EF
+ 1: E
+
+/abcd*efg/i
+    ABCDEFG
+ 0: ABCDEFG
+
+/ab*/i
+    XABYABBBZ
+ 0: AB
+    XAYABBBZ
+ 0: A
+
+/(ab|cd)e/i
+    ABCDE
+ 0: CDE
+ 1: CD
+
+/[abhgefdc]ij/i
+    HIJ
+ 0: HIJ
+
+/^(ab|cd)e/i
+    ABCDE
+No match
+
+/(abc|)ef/i
+    ABCDEF
+ 0: EF
+ 1: 
+
+/(a|b)c*d/i
+    ABCD
+ 0: BCD
+ 1: B
+
+/(ab|ab*)bc/i
+    ABC
+ 0: ABC
+ 1: A
+
+/a([bc]*)c*/i
+    ABC
+ 0: ABC
+ 1: BC
+
+/a([bc]*)(c*d)/i
+    ABCD
+ 0: ABCD
+ 1: BC
+ 2: D
+
+/a([bc]+)(c*d)/i
+    ABCD
+ 0: ABCD
+ 1: BC
+ 2: D
+
+/a([bc]*)(c+d)/i
+    ABCD
+ 0: ABCD
+ 1: B
+ 2: CD
+
+/a[bcd]*dcdcde/i
+    ADCDCDE
+ 0: ADCDCDE
+
+/a[bcd]+dcdcde/i
+
+/(ab|a)b*c/i
+    ABC
+ 0: ABC
+ 1: AB
+
+/((a)(b)c)(d)/i
+    ABCD
+ 0: ABCD
+ 1: ABC
+ 2: A
+ 3: B
+ 4: D
+
+/[a-zA-Z_][a-zA-Z0-9_]*/i
+    ALPHA
+ 0: ALPHA
+
+/^a(bc+|b[eh])g|.h$/i
+    ABH
+ 0: BH
+
+/(bc+d$|ef*g.|h?i(j|k))/i
+    EFFGZ
+ 0: EFFGZ
+ 1: EFFGZ
+    IJ
+ 0: IJ
+ 1: IJ
+ 2: J
+    REFFGZ
+ 0: EFFGZ
+ 1: EFFGZ
+    *** Failers
+No match
+    ADCDCDE
+No match
+    EFFG
+No match
+    BCDD
+No match
+
+/((((((((((a))))))))))/i
+    A
+ 0: A
+ 1: A
+ 2: A
+ 3: A
+ 4: A
+ 5: A
+ 6: A
+ 7: A
+ 8: A
+ 9: A
+10: A
+
+/((((((((((a))))))))))\10/i
+    AA
+ 0: AA
+ 1: A
+ 2: A
+ 3: A
+ 4: A
+ 5: A
+ 6: A
+ 7: A
+ 8: A
+ 9: A
+10: A
+
+/(((((((((a)))))))))/i
+    A
+ 0: A
+ 1: A
+ 2: A
+ 3: A
+ 4: A
+ 5: A
+ 6: A
+ 7: A
+ 8: A
+ 9: A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
+    A
+ 0: A
+ 1: A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
+    C
+ 0: C
+ 1: C
+
+/multiple words of text/i
+    *** Failers
+No match
+    AA
+No match
+    UH-UH
+No match
+
+/multiple words/i
+    MULTIPLE WORDS, YEAH
+ 0: MULTIPLE WORDS
+
+/(.*)c(.*)/i
+    ABCDE
+ 0: ABCDE
+ 1: AB
+ 2: DE
+
+/\((.*), (.*)\)/i
+    (A, B)
+ 0: (A, B)
+ 1: A
+ 2: B
+
+/[k]/i
+
+/abcd/i
+    ABCD
+ 0: ABCD
+
+/a(bc)d/i
+    ABCD
+ 0: ABCD
+ 1: BC
+
+/a[-]?c/i
+    AC
+ 0: AC
+
+/(abc)\1/i
+    ABCABC
+ 0: ABCABC
+ 1: ABC
+
+/([a-c]*)\1/i
+    ABCABC
+ 0: ABCABC
+ 1: ABC
+
+/a(?!b)./
+    abad
+ 0: ad
+
+/a(?=d)./
+    abad
+ 0: ad
+
+/a(?=c|d)./
+    abad
+ 0: ad
+
+/a(?:b|c|d)(.)/
+    ace
+ 0: ace
+ 1: e
+
+/a(?:b|c|d)*(.)/
+    ace
+ 0: ace
+ 1: e
+
+/a(?:b|c|d)+?(.)/
+    ace
+ 0: ace
+ 1: e
+    acdbcdbe
+ 0: acd
+ 1: d
+
+/a(?:b|c|d)+(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: e
+
+/a(?:b|c|d){2}(.)/
+    acdbcdbe
+ 0: acdb
+ 1: b
+
+/a(?:b|c|d){4,5}(.)/
+    acdbcdbe
+ 0: acdbcdb
+ 1: b
+
+/a(?:b|c|d){4,5}?(.)/
+    acdbcdbe
+ 0: acdbcd
+ 1: d
+
+/((foo)|(bar))*/
+    foobar
+ 0: foobar
+ 1: bar
+ 2: foo
+ 3: bar
+
+/a(?:b|c|d){6,7}(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: e
+
+/a(?:b|c|d){6,7}?(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: e
+
+/a(?:b|c|d){5,6}(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: e
+
+/a(?:b|c|d){5,6}?(.)/
+    acdbcdbe
+ 0: acdbcdb
+ 1: b
+
+/a(?:b|c|d){5,7}(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: e
+
+/a(?:b|c|d){5,7}?(.)/
+    acdbcdbe
+ 0: acdbcdb
+ 1: b
+
+/a(?:b|(c|e){1,2}?|d)+?(.)/
+    ace
+ 0: ace
+ 1: c
+ 2: e
+
+/^(.+)?B/
+    AB
+ 0: AB
+ 1: A
+
+/^([^a-z])|(\^)$/
+    .
+ 0: .
+ 1: .
+
+/^[&lt;&gt;]&amp;/
+    &lt;&amp;OUT
+ 0: &lt;&amp;
+
+/^(a\1?){4}$/
+    aaaaaaaaaa
+ 0: aaaaaaaaaa
+ 1: aaaa
+    *** Failers
+No match
+    AB
+No match
+    aaaaaaaaa
+No match
+    aaaaaaaaaaa
+No match
+
+/^(a(?(1)\1)){4}$/
+    aaaaaaaaaa
+ 0: aaaaaaaaaa
+ 1: aaaa
+    *** Failers
+No match
+    aaaaaaaaa
+No match
+    aaaaaaaaaaa
+No match
+
+/(?:(f)(o)(o)|(b)(a)(r))*/
+    foobar
+ 0: foobar
+ 1: f
+ 2: o
+ 3: o
+ 4: b
+ 5: a
+ 6: r
+
+/(?&lt;=a)b/
+    ab
+ 0: b
+    *** Failers
+No match
+    cb
+No match
+    b
+No match
+
+/(?&lt;!c)b/
+    ab
+ 0: b
+    b
+ 0: b
+    b
+ 0: b
+
+/(?:..)*a/
+    aba
+ 0: aba
+
+/(?:..)*?a/
+    aba
+ 0: a
+
+/^(?:b|a(?=(.)))*\1/
+    abc
+ 0: ab
+ 1: b
+
+/^(){3,5}/
+    abc
+ 0: 
+ 1: 
+
+/^(a+)*ax/
+    aax
+ 0: aax
+ 1: a
+
+/^((a|b)+)*ax/
+    aax
+ 0: aax
+ 1: a
+ 2: a
+
+/^((a|bc)+)*ax/
+    aax
+ 0: aax
+ 1: a
+ 2: a
+
+/(a|x)*ab/
+    cab
+ 0: ab
+
+/(a)*ab/
+    cab
+ 0: ab
+
+/(?:(?i)a)b/
+    ab
+ 0: ab
+
+/((?i)a)b/
+    ab
+ 0: ab
+ 1: a
+
+/(?:(?i)a)b/
+    Ab
+ 0: Ab
+
+/((?i)a)b/
+    Ab
+ 0: Ab
+ 1: A
+
+/(?:(?i)a)b/
+    *** Failers
+No match
+    cb
+No match
+    aB
+No match
+
+/((?i)a)b/
+
+/(?i:a)b/
+    ab
+ 0: ab
+
+/((?i:a))b/
+    ab
+ 0: ab
+ 1: a
+
+/(?i:a)b/
+    Ab
+ 0: Ab
+
+/((?i:a))b/
+    Ab
+ 0: Ab
+ 1: A
+
+/(?i:a)b/
+    *** Failers
+No match
+    aB
+No match
+    aB
+No match
+
+/((?i:a))b/
+
+/(?:(?-i)a)b/i
+    ab
+ 0: ab
+
+/((?-i)a)b/i
+    ab
+ 0: ab
+ 1: a
+
+/(?:(?-i)a)b/i
+    aB
+ 0: aB
+
+/((?-i)a)b/i
+    aB
+ 0: aB
+ 1: a
+
+/(?:(?-i)a)b/i
+    *** Failers
+No match
+    aB
+ 0: aB
+    Ab
+No match
+
+/((?-i)a)b/i
+
+/(?:(?-i)a)b/i
+    aB
+ 0: aB
+
+/((?-i)a)b/i
+    aB
+ 0: aB
+ 1: a
+
+/(?:(?-i)a)b/i
+    *** Failers
+No match
+    Ab
+No match
+    AB
+No match
+
+/((?-i)a)b/i
+
+/(?-i:a)b/i
+    ab
+ 0: ab
+
+/((?-i:a))b/i
+    ab
+ 0: ab
+ 1: a
+
+/(?-i:a)b/i
+    aB
+ 0: aB
+
+/((?-i:a))b/i
+    aB
+ 0: aB
+ 1: a
+
+/(?-i:a)b/i
+    *** Failers
+No match
+    AB
+No match
+    Ab
+No match
+
+/((?-i:a))b/i
+
+/(?-i:a)b/i
+    aB
+ 0: aB
+
+/((?-i:a))b/i
+    aB
+ 0: aB
+ 1: a
+
+/(?-i:a)b/i
+    *** Failers
+No match
+    Ab
+No match
+    AB
+No match
+
+/((?-i:a))b/i
+
+/((?-i:a.))b/i
+    *** Failers
+No match
+    AB
+No match
+    a\nB
+No match
+
+/((?s-i:a.))b/i
+    a\nB
+ 0: a\x0aB
+ 1: a\x0a
+
+/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
+    cabbbb
+ 0: cabbbb
+
+/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
+    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+ 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+
+/(ab)\d\1/i
+    Ab4ab
+ 0: Ab4ab
+ 1: Ab
+    ab4Ab
+ 0: ab4Ab
+ 1: ab
+
+/foo\w*\d{4}baz/
+    foobar1234baz
+ 0: foobar1234baz
+
+/x(~~)*(?:(?:F)?)?/
+    x~~
+ 0: x~~
+ 1: ~~
+
+/^a(?#xxx){3}c/
+    aaac
+ 0: aaac
+
+/^a (?#xxx) (?#yyy) {3}c/x
+    aaac
+ 0: aaac
+
+/(?&lt;![cd])b/
+    *** Failers
+No match
+    B\nB
+No match
+    dbcb
+No match
+
+/(?&lt;![cd])[ab]/
+    dbaacb
+ 0: a
+
+/(?&lt;!(c|d))b/
+
+/(?&lt;!(c|d))[ab]/
+    dbaacb
+ 0: a
+
+/(?&lt;!cd)[ab]/
+    cdaccb
+ 0: b
+
+/^(?:a?b?)*$/
+    \
+ 0: 
+    a
+ 0: a
+    ab
+ 0: ab
+    aaa   
+ 0: aaa
+    *** Failers
+No match
+    dbcb
+No match
+    a--
+No match
+    aa-- 
+No match
+
+/((?s)^a(.))((?m)^b$)/
+    a\nb\nc\n
+ 0: a\x0ab
+ 1: a\x0a
+ 2: \x0a
+ 3: b
+
+/((?m)^b$)/
+    a\nb\nc\n
+ 0: b
+ 1: b
+
+/(?m)^b/
+    a\nb\n
+ 0: b
+
+/(?m)^(b)/
+    a\nb\n
+ 0: b
+ 1: b
+
+/((?m)^b)/
+    a\nb\n
+ 0: b
+ 1: b
+
+/\n((?m)^b)/
+    a\nb\n
+ 0: \x0ab
+ 1: b
+
+/((?s).)c(?!.)/
+    a\nb\nc\n
+ 0: \x0ac
+ 1: \x0a
+    a\nb\nc\n
+ 0: \x0ac
+ 1: \x0a
+
+/((?s)b.)c(?!.)/
+    a\nb\nc\n
+ 0: b\x0ac
+ 1: b\x0a
+    a\nb\nc\n
+ 0: b\x0ac
+ 1: b\x0a
+
+/^b/
+
+/()^b/
+    *** Failers
+No match
+    a\nb\nc\n
+No match
+    a\nb\nc\n
+No match
+
+/((?m)^b)/
+    a\nb\nc\n
+ 0: b
+ 1: b
+
+/(?(1)a|b)/
+
+/(?(1)b|a)/
+    a
+ 0: a
+
+/(x)?(?(1)a|b)/
+    *** Failers
+No match
+    a
+No match
+    a
+No match
+
+/(x)?(?(1)b|a)/
+    a
+ 0: a
+
+/()?(?(1)b|a)/
+    a
+ 0: a
+
+/()(?(1)b|a)/
+
+/()?(?(1)a|b)/
+    a
+ 0: a
+ 1: 
+
+/^(\()?blah(?(1)(\)))$/
+    (blah)
+ 0: (blah)
+ 1: (
+ 2: )
+    blah
+ 0: blah
+    *** Failers
+No match
+    a
+No match
+    blah)
+No match
+    (blah
+No match
+
+/^(\(+)?blah(?(1)(\)))$/
+    (blah)
+ 0: (blah)
+ 1: (
+ 2: )
+    blah
+ 0: blah
+    *** Failers
+No match
+    blah)
+No match
+    (blah
+No match
+
+/(?(?!a)a|b)/
+
+/(?(?!a)b|a)/
+    a
+ 0: a
+
+/(?(?=a)b|a)/
+    *** Failers
+No match
+    a
+No match
+    a
+No match
+
+/(?(?=a)a|b)/
+    a
+ 0: a
+
+/(?=(a+?))(\1ab)/
+    aaab
+ 0: aab
+ 1: a
+ 2: aab
+
+/^(?=(a+?))\1ab/
+
+/(\w+:)+/
+    one:
+ 0: one:
+ 1: one:
+
+/$(?&lt;=^(a))/
+    a
+ 0: 
+ 1: a
+
+/(?=(a+?))(\1ab)/
+    aaab
+ 0: aab
+ 1: a
+ 2: aab
+
+/^(?=(a+?))\1ab/
+    *** Failers
+No match
+    aaab
+No match
+    aaab
+No match
+
+/([\w:]+::)?(\w+)$/
+    abcd
+ 0: abcd
+ 1: &lt;unset&gt;
+ 2: abcd
+    xy:z:::abcd
+ 0: xy:z:::abcd
+ 1: xy:z:::
+ 2: abcd
+
+/^[^bcd]*(c+)/
+    aexycd
+ 0: aexyc
+ 1: c
+
+/(a*)b+/
+    caab
+ 0: aab
+ 1: aa
+
+/([\w:]+::)?(\w+)$/
+    abcd
+ 0: abcd
+ 1: &lt;unset&gt;
+ 2: abcd
+    xy:z:::abcd
+ 0: xy:z:::abcd
+ 1: xy:z:::
+ 2: abcd
+    *** Failers
+ 0: Failers
+ 1: &lt;unset&gt;
+ 2: Failers
+    abcd:
+No match
+    abcd:
+No match
+
+/^[^bcd]*(c+)/
+    aexycd
+ 0: aexyc
+ 1: c
+
+/(&gt;a+)ab/
+
+/(?&gt;a+)b/
+    aaab
+ 0: aaab
+
+/([[:]+)/
+    a:[b]:
+ 0: :[
+ 1: :[
+
+/([[=]+)/
+    a=[b]=
+ 0: =[
+ 1: =[
+
+/([[.]+)/
+    a.[b].
+ 0: .[
+ 1: .[
+
+/((?&gt;a+)b)/
+    aaab
+ 0: aaab
+ 1: aaab
+
+/(?&gt;(a+))b/
+    aaab
+ 0: aaab
+ 1: aaa
+
+/((?&gt;[^()]+)|\([^()]*\))+/
+    ((abc(ade)ufh()()x
+ 0: abc(ade)ufh()()x
+ 1: x
+
+/a\Z/
+    *** Failers
+No match
+    aaab
+No match
+    a\nb\n
+No match
+
+/b\Z/
+    a\nb\n
+ 0: b
+
+/b\z/
+
+/b\Z/
+    a\nb
+ 0: b
+
+/b\z/
+    a\nb
+ 0: b
+    *** Failers
+No match
+    
+/^(?&gt;(?(1)\.|())[^\W_](?&gt;[a-z0-9-]*[^\W_])?)+$/
+    a
+ 0: a
+ 1: 
+    abc
+ 0: abc
+ 1: 
+    a-b
+ 0: a-b
+ 1: 
+    0-9 
+ 0: 0-9
+ 1: 
+    a.b
+ 0: a.b
+ 1: 
+    5.6.7  
+ 0: 5.6.7
+ 1: 
+    the.quick.brown.fox
+ 0: the.quick.brown.fox
+ 1: 
+    a100.b200.300c  
+ 0: a100.b200.300c
+ 1: 
+    12-ab.1245 
+ 0: 12-ab.1245
+ 1: 
+    *** Failers
+No match
+    \
+No match
+    .a
+No match
+    -a
+No match
+    a-
+No match
+    a.  
+No match
+    a_b 
+No match
+    a.-
+No match
+    a..  
+No match
+    ab..bc 
+No match
+    the.quick.brown.fox-
+No match
+    the.quick.brown.fox.
+No match
+    the.quick.brown.fox_
+No match
+    the.quick.brown.fox+       
+No match
+
+/(?&gt;.*)(?&lt;=(abcd|wxyz))/
+    alphabetabcd
+ 0: alphabetabcd
+ 1: abcd
+    endingwxyz
+ 0: endingwxyz
+ 1: wxyz
+    *** Failers
+No match
+    a rather long string that doesn't end with one of them
+No match
+
+/word (?&gt;(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
+    word cat dog elephant mussel cow horse canary baboon snake shark otherword
+ 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
+    word cat dog elephant mussel cow horse canary baboon snake shark
+No match
+  
+/word (?&gt;[a-zA-Z0-9]+ ){0,30}otherword/
+    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+No match
+
+/(?&lt;=\d{3}(?!999))foo/
+    999foo
+ 0: foo
+    123999foo 
+ 0: foo
+    *** Failers
+No match
+    123abcfoo
+No match
+    
+/(?&lt;=(?!...999)\d{3})foo/
+    999foo
+ 0: foo
+    123999foo 
+ 0: foo
+    *** Failers
+No match
+    123abcfoo
+No match
+
+/(?&lt;=\d{3}(?!999)...)foo/
+    123abcfoo
+ 0: foo
+    123456foo 
+ 0: foo
+    *** Failers
+No match
+    123999foo  
+No match
+    
+/(?&lt;=\d{3}...)(?&lt;!999)foo/
+    123abcfoo   
+ 0: foo
+    123456foo 
+ 0: foo
+    *** Failers
+No match
+    123999foo  
+No match
+
+/&lt;a[\s]+href[\s]*=[\s]*          # find &lt;a href=
+ ([\&quot;\'])?                       # find single or double quote
+ (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
+                                 # quote, otherwise match up to next space
+/isx
+    &lt;a href=abcd xyz
+ 0: &lt;a href=abcd
+ 1: &lt;unset&gt;
+ 2: &lt;unset&gt;
+ 3: abcd
+    &lt;a href=\&quot;abcd xyz pqr\&quot; cats
+ 0: &lt;a href=&quot;abcd xyz pqr&quot;
+ 1: &quot;
+ 2: abcd xyz pqr
+    &lt;a href=\'abcd xyz pqr\' cats
+ 0: &lt;a href='abcd xyz pqr'
+ 1: '
+ 2: abcd xyz pqr
+
+/&lt;a\s+href\s*=\s*                # find &lt;a href=
+ ([&quot;'])?                         # find single or double quote
+ (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
+                                 # quote, otherwise match up to next space
+/isx
+    &lt;a href=abcd xyz
+ 0: &lt;a href=abcd
+ 1: &lt;unset&gt;
+ 2: &lt;unset&gt;
+ 3: abcd
+    &lt;a href=\&quot;abcd xyz pqr\&quot; cats
+ 0: &lt;a href=&quot;abcd xyz pqr&quot;
+ 1: &quot;
+ 2: abcd xyz pqr
+    &lt;a href       =       \'abcd xyz pqr\' cats
+ 0: &lt;a href       =       'abcd xyz pqr'
+ 1: '
+ 2: abcd xyz pqr
+
+/&lt;a\s+href(?&gt;\s*)=(?&gt;\s*)        # find &lt;a href=
+ ([&quot;'])?                         # find single or double quote
+ (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
+                                 # quote, otherwise match up to next space
+/isx
+    &lt;a href=abcd xyz
+ 0: &lt;a href=abcd
+ 1: &lt;unset&gt;
+ 2: &lt;unset&gt;
+ 3: abcd
+    &lt;a href=\&quot;abcd xyz pqr\&quot; cats
+ 0: &lt;a href=&quot;abcd xyz pqr&quot;
+ 1: &quot;
+ 2: abcd xyz pqr
+    &lt;a href       =       \'abcd xyz pqr\' cats
+ 0: &lt;a href       =       'abcd xyz pqr'
+ 1: '
+ 2: abcd xyz pqr
+
+/((Z)+|A)*/
+    ZABCDEFG
+ 0: ZA
+ 1: A
+ 2: Z
+
+/(Z()|A)*/
+    ZABCDEFG
+ 0: ZA
+ 1: A
+ 2: 
+
+/(Z(())|A)*/
+    ZABCDEFG
+ 0: ZA
+ 1: A
+ 2: 
+ 3: 
+
+/((?&gt;Z)+|A)*/
+    ZABCDEFG
+ 0: ZA
+ 1: A
+
+/((?&gt;)+|A)*/
+    ZABCDEFG
+ 0: 
+ 1: 
+
+/a*/g
+    abbab
+ 0: a
+ 0: 
+ 0: 
+ 0: a
+ 0: 
+ 0: 
+
+/^[a-\d]/
+    abcde
+ 0: a
+    -things
+ 0: -
+    0digit
+ 0: 0
+    *** Failers
+No match
+    bcdef    
+No match
+
+/^[\d-a]/
+    abcde
+ 0: a
+    -things
+ 0: -
+    0digit
+ 0: 0
+    *** Failers
+No match
+    bcdef    
+No match
+    
+/[[:space:]]+/
+    &gt; \x09\x0a\x0c\x0d\x0b&lt;
+ 0:  \x09\x0a\x0c\x0d\x0b
+     
+/[[:blank:]]+/
+    &gt; \x09\x0a\x0c\x0d\x0b&lt;
+ 0:  \x09
+     
+/[\s]+/
+    &gt; \x09\x0a\x0c\x0d\x0b&lt;
+ 0:  \x09\x0a\x0c\x0d
+     
+/\s+/
+    &gt; \x09\x0a\x0c\x0d\x0b&lt;
+ 0:  \x09\x0a\x0c\x0d
+     
+/a b/x
+    ab
+No match
+
+/(?!\A)x/m
+  a\nxb\n
+ 0: x
+
+/(?!^)x/m
+  a\nxb\n
+No match
+
+/abc\Qabc\Eabc/
+    abcabcabc
+ 0: abcabcabc
+    
+/abc\Q(*+|\Eabc/
+    abc(*+|abc 
+ 0: abc(*+|abc
+
+/   abc\Q abc\Eabc/x
+    abc abcabc
+ 0: abc abcabc
+    *** Failers
+No match
+    abcabcabc  
+No match
+    
+/abc#comment
+    \Q#not comment
+    literal\E/x
+    abc#not comment\n    literal     
+ 0: abc#not comment\x0a    literal
+
+/abc#comment
+    \Q#not comment
+    literal/x
+    abc#not comment\n    literal     
+ 0: abc#not comment\x0a    literal
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment
+    /x
+    abc#not comment\n    literal     
+ 0: abc#not comment\x0a    literal
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment/x
+    abc#not comment\n    literal     
+ 0: abc#not comment\x0a    literal
+
+/\Qabc\$xyz\E/
+    abc\\\$xyz
+ 0: abc\$xyz
+
+/\Qabc\E\$\Qxyz\E/
+    abc\$xyz
+ 0: abc$xyz
+
+/\Gabc/
+    abc
+ 0: abc
+    *** Failers
+No match
+    xyzabc  
+No match
+
+/\Gabc./g
+    abc1abc2xyzabc3
+ 0: abc1
+ 0: abc2
+
+/abc./g
+    abc1abc2xyzabc3 
+ 0: abc1
+ 0: abc2
+ 0: abc3
+
+/a(?x: b c )d/
+    XabcdY
+ 0: abcd
+    *** Failers 
+No match
+    Xa b c d Y 
+No match
+
+/((?x)x y z | a b c)/
+    XabcY
+ 0: abc
+ 1: abc
+    AxyzB 
+ 0: xyz
+ 1: xyz
+
+/(?i)AB(?-i)C/
+    XabCY
+ 0: abC
+    *** Failers
+No match
+    XabcY  
+No match
+
+/((?i)AB(?-i)C|D)E/
+    abCE
+ 0: abCE
+ 1: abC
+    DE
+ 0: DE
+ 1: D
+    *** Failers
+No match
+    abcE
+No match
+    abCe  
+No match
+    dE
+No match
+    De    
+No match
+
+/(.*)\d+\1/
+    abc123abc
+ 0: abc123abc
+ 1: abc
+    abc123bc 
+ 0: bc123bc
+ 1: bc
+
+/(.*)\d+\1/s
+    abc123abc
+ 0: abc123abc
+ 1: abc
+    abc123bc 
+ 0: bc123bc
+ 1: bc
+    
+/((.*))\d+\1/
+    abc123abc
+ 0: abc123abc
+ 1: abc
+ 2: abc
+    abc123bc  
+ 0: bc123bc
+ 1: bc
+ 2: bc
+
+/-- This tests for an IPv6 address in the form where it can have up to --/
+/-- eight components, one and only one of which is empty. This must be --/
+No match
+/-- an internal component. --/
+No match
+
+/^(?!:)                       # colon disallowed at start
+  (?:                         # start of item
+    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
+    (?(1)0 | () ) )           # if null previously matched, fail; else null
+    :                         # followed by colon
+  ){1,7}                      # end item; 1-7 of them required               
+  [0-9a-f]{1,4} $             # final hex number at end of string
+  (?(1)|.)                    # check that there was an empty component
+  /xi
+    a123::a123
+ 0: a123::a123
+ 1: 
+    a123:b342::abcd
+ 0: a123:b342::abcd
+ 1: 
+    a123:b342::324e:abcd
+ 0: a123:b342::324e:abcd
+ 1: 
+    a123:ddde:b342::324e:abcd
+ 0: a123:ddde:b342::324e:abcd
+ 1: 
+    a123:ddde:b342::324e:dcba:abcd
+ 0: a123:ddde:b342::324e:dcba:abcd
+ 1: 
+    a123:ddde:9999:b342::324e:dcba:abcd
+ 0: a123:ddde:9999:b342::324e:dcba:abcd
+ 1: 
+    *** Failers
+No match
+    1:2:3:4:5:6:7:8
+No match
+    a123:bce:ddde:9999:b342::324e:dcba:abcd
+No match
+    a123::9999:b342::324e:dcba:abcd
+No match
+    abcde:2:3:4:5:6:7:8
+No match
+    ::1
+No match
+    abcd:fee0:123::   
+No match
+    :1
+No match
+    1:  
+No match
+
+/[z\Qa-d]\E]/
+    z
+ 0: z
+    a
+ 0: a
+    -
+ 0: -
+    d
+ 0: d
+    ] 
+ 0: ]
+    *** Failers
+ 0: a
+    b     
+No match
+
+/[\z\C]/
+    z
+ 0: z
+    C 
+ 0: C
+    
+/\M/
+    M 
+ 0: M
+    
+/(a+)*b/
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
+No match
+    
+/(?i)reg(?:ul(?:[aä]|ae)r|ex)/
+    REGular
+ 0: REGular
+    regulaer
+ 0: regulaer
+    Regex  
+ 0: Regex
+    regulär 
+ 0: regul\xe4r
+
+/Åæåä[à-ÿÀ-ß]+/
+    Åæåäà
+ 0: \xc5\xe6\xe5\xe4\xe0
+    Åæåäÿ
+ 0: \xc5\xe6\xe5\xe4\xff
+    ÅæåäÀ
+ 0: \xc5\xe6\xe5\xe4\xc0
+    Åæåäß
+ 0: \xc5\xe6\xe5\xe4\xdf
+
+/(?&lt;=Z)X./
+  \x84XAZXB
+ 0: XB
+
+/ab cd (?x) de fg/
+    ab cd defg
+ 0: ab cd defg
+
+/ab cd(?x) de fg/
+    ab cddefg
+ 0: ab cddefg
+    ** Failers 
+No match
+    abcddefg
+No match
+
+/(?&lt;![^f]oo)(bar)/
+    foobarX 
+ 0: bar
+ 1: bar
+    ** Failers 
+No match
+    boobarX
+No match
+
+/(?&lt;![^f])X/
+    offX
+ 0: X
+    ** Failers
+No match
+    onyX  
+No match
+
+/(?&lt;=[^f])X/
+    onyX
+ 0: X
+    ** Failers
+No match
+    offX 
+No match
+
+/^/mg
+    a\nb\nc\n
+ 0: 
+ 0: 
+ 0: 
+    \ 
+ 0: 
+    
+/(?&lt;=C\n)^/mg
+    A\nC\nC\n 
+ 0: 
+
+/(?:(?(1)a|b)(X))+/
+    bXaX
+ 0: bXaX
+ 1: X
+
+/(?:(?(1)\1a|b)(X|Y))+/
+    bXXaYYaY
+ 0: bXXaYYaY
+ 1: Y
+    bXYaXXaX  
+ 0: bX
+ 1: X
+
+/()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
+    bXXaYYaY
+ 0: bX
+ 1: 
+ 2: 
+ 3: 
+ 4: 
+ 5: 
+ 6: 
+ 7: 
+ 8: 
+ 9: 
+10: X
+
+/[[,abc,]+]/
+    abc]
+ 0: abc]
+    a,b]
+ 0: a,b]
+    [a,b,c]  
+ 0: [a,b,c]
+
+/(?-x: )/x
+    A\x20B
+ 0:  
+    
+&quot;(?x)(?-x: \s*#\s*)&quot;
+    A # B
+ 0:  # 
+    ** Failers
+No match
+    #  
+No match
+
+&quot;(?x-is)(?:(?-ixs) \s*#\s*) include&quot;
+    A #include
+ 0:  #include
+    ** Failers
+No match
+    A#include  
+No match
+    A #Include
+No match
+
+/a*b*\w/
+    aaabbbb
+ 0: aaabbbb
+    aaaa
+ 0: aaaa
+    a
+ 0: a
+
+/a*b?\w/
+    aaabbbb
+ 0: aaabb
+    aaaa
+ 0: aaaa
+    a
+ 0: a
+
+/a*b{0,4}\w/
+    aaabbbb
+ 0: aaabbbb
+    aaaa
+ 0: aaaa
+    a
+ 0: a
+
+/a*b{0,}\w/
+    aaabbbb
+ 0: aaabbbb
+    aaaa
+ 0: aaaa
+    a
+ 0: a
+    
+/a*\d*\w/
+    0a
+ 0: 0a
+    a 
+ 0: a
+    
+/a*b *\w/x
+    a 
+ 0: a
+
+/a*b#comment
+  *\w/x
+    a 
+ 0: a
+
+/a* b *\w/x
+    a 
+ 0: a
+
+/^\w+=.*(\\\n.*)*/
+    abc=xyz\\\npqr
+ 0: abc=xyz\
+
+/(?=(\w+))\1:/
+    abcd:
+ 0: abcd:
+ 1: abcd
+
+/^(?=(\w+))\1:/
+    abcd:
+ 0: abcd:
+ 1: abcd
+
+/^\Eabc/
+    abc
+ 0: abc
+    
+/^[\Eabc]/
+    a
+ 0: a
+    ** Failers 
+No match
+    E 
+No match
+    
+/^[a-\Ec]/
+    b
+ 0: b
+    ** Failers
+No match
+    -
+No match
+    E    
+No match
+
+/^[a\E\E-\Ec]/
+    b
+ 0: b
+    ** Failers
+No match
+    -
+No match
+    E    
+No match
+
+/^[\E\Qa\E-\Qz\E]+/
+    b
+ 0: b
+    ** Failers
+No match
+    -  
+No match
+    
+/^[a\Q]bc\E]/
+    a
+ 0: a
+    ]
+ 0: ]
+    c
+ 0: c
+    
+/^[a-\Q\E]/
+    a
+ 0: a
+    -     
+ 0: -
+
+/^(a()*)*/
+    aaaa
+ 0: aaaa
+ 1: a
+ 2: 
+
+/^(?:a(?:(?:))*)*/
+    aaaa
+ 0: aaaa
+
+/^(a()+)+/
+    aaaa
+ 0: aaaa
+ 1: a
+ 2: 
+
+/^(?:a(?:(?:))+)+/
+    aaaa
+ 0: aaaa
+
+/(a){0,3}(?(1)b|(c|))*D/
+    abbD
+ 0: abbD
+ 1: a
+    ccccD
+ 0: ccccD
+ 1: &lt;unset&gt;
+ 2: 
+    D  
+ 0: D
+ 1: &lt;unset&gt;
+ 2: 
+
+/(a|)*\d/
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+ 1: 
+
+/(?&gt;a|)*\d/
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+
+/(?:a|)*\d/
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+
+/\Z/g
+  abc\n
+ 0: 
+ 0: 
+  
+/^(?s)(?&gt;.*)(?&lt;!\n)/
+  abc
+ 0: abc
+  abc\n  
+No match
+
+/^(?![^\n]*\n\z)/
+  abc
+ 0: 
+  abc\n 
+No match
+  
+/\z(?&lt;!\n)/
+  abc
+ 0: 
+  abc\n  
+No match
+
+/(.*(.)?)*/
+    abcd
+ 0: abcd
+ 1: 
+
+/( (A | (?(1)0|) )*   )/x
+    abcd
+ 0: 
+ 1: 
+ 2: 
+
+/( ( (?(1)0|) )*   )/x
+    abcd
+ 0: 
+ 1: 
+ 2: 
+
+/(  (?(1)0|)*   )/x
+    abcd
+ 0: 
+ 1: 
+
+/ End of testinput1 /
</ins></span></pre></div>
<a id="trunkLayoutTestsfastregextestoutput4"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regex/testoutput4 (0 => 28513)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regex/testoutput4                                (rev 0)
+++ trunk/LayoutTests/fast/regex/testoutput4        2007-12-07 07:02:16 UTC (rev 28513)
</span><span class="lines">@@ -0,0 +1,941 @@
</span><ins>+/-- Do not use the \x{} construct except with patterns that have the --/
+/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/
+No match
+/-- that option is set. However, the latest Perls recognize them always. --/
+No match
+
+/a.b/8
+    acb
+ 0: acb
+    a\x7fb
+ 0: a\x{7f}b
+    a\x{100}b 
+ 0: a\x{100}b
+    *** Failers
+No match
+    a\nb  
+No match
+
+/a(.{3})b/8
+    a\x{4000}xyb 
+ 0: a\x{4000}xyb
+ 1: \x{4000}xy
+    a\x{4000}\x7fyb 
+ 0: a\x{4000}\x{7f}yb
+ 1: \x{4000}\x{7f}y
+    a\x{4000}\x{100}yb 
+ 0: a\x{4000}\x{100}yb
+ 1: \x{4000}\x{100}y
+    *** Failers
+No match
+    a\x{4000}b 
+No match
+    ac\ncb 
+No match
+
+/a(.*?)(.)/
+    a\xc0\x88b
+ 0: a\xc0
+ 1: 
+ 2: \xc0
+
+/a(.*?)(.)/8
+    a\x{100}b
+ 0: a\x{100}
+ 1: 
+ 2: \x{100}
+
+/a(.*)(.)/
+    a\xc0\x88b
+ 0: a\xc0\x88b
+ 1: \xc0\x88
+ 2: b
+
+/a(.*)(.)/8
+    a\x{100}b
+ 0: a\x{100}b
+ 1: \x{100}
+ 2: b
+
+/a(.)(.)/
+    a\xc0\x92bcd
+ 0: a\xc0\x92
+ 1: \xc0
+ 2: \x92
+
+/a(.)(.)/8
+    a\x{240}bcd
+ 0: a\x{240}b
+ 1: \x{240}
+ 2: b
+
+/a(.?)(.)/
+    a\xc0\x92bcd
+ 0: a\xc0\x92
+ 1: \xc0
+ 2: \x92
+
+/a(.?)(.)/8
+    a\x{240}bcd
+ 0: a\x{240}b
+ 1: \x{240}
+ 2: b
+
+/a(.??)(.)/
+    a\xc0\x92bcd
+ 0: a\xc0
+ 1: 
+ 2: \xc0
+
+/a(.??)(.)/8
+    a\x{240}bcd
+ 0: a\x{240}
+ 1: 
+ 2: \x{240}
+
+/a(.{3})b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+ 1: \x{1234}xy
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+ 1: \x{1234}\x{4321}y
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+ 1: \x{1234}\x{4321}\x{3412}
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+    ac\ncb 
+No match
+
+/a(.{3,})b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+ 1: \x{1234}xy
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+ 1: \x{1234}\x{4321}y
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+ 1: \x{1234}\x{4321}\x{3412}
+    axxxxbcdefghijb 
+ 0: axxxxbcdefghijb
+ 1: xxxxbcdefghij
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+ 1: \x{1234}\x{4321}\x{3412}\x{3421}
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+
+/a(.{3,}?)b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+ 1: \x{1234}xy
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+ 1: \x{1234}\x{4321}y
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+ 1: \x{1234}\x{4321}\x{3412}
+    axxxxbcdefghijb 
+ 0: axxxxb
+ 1: xxxx
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+ 1: \x{1234}\x{4321}\x{3412}\x{3421}
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+
+/a(.{3,5})b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+ 1: \x{1234}xy
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+ 1: \x{1234}\x{4321}y
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+ 1: \x{1234}\x{4321}\x{3412}
+    axxxxbcdefghijb 
+ 0: axxxxb
+ 1: xxxx
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+ 1: \x{1234}\x{4321}\x{3412}\x{3421}
+    axbxxbcdefghijb 
+ 0: axbxxb
+ 1: xbxx
+    axxxxxbcdefghijb 
+ 0: axxxxxb
+ 1: xxxxx
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+    axxxxxxbcdefghijb 
+No match
+
+/a(.{3,5}?)b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+ 1: \x{1234}xy
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+ 1: \x{1234}\x{4321}y
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+ 1: \x{1234}\x{4321}\x{3412}
+    axxxxbcdefghijb 
+ 0: axxxxb
+ 1: xxxx
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+ 1: \x{1234}\x{4321}\x{3412}\x{3421}
+    axbxxbcdefghijb 
+ 0: axbxxb
+ 1: xbxx
+    axxxxxbcdefghijb 
+ 0: axxxxxb
+ 1: xxxxx
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+    axxxxxxbcdefghijb 
+No match
+
+/^[a\x{c0}]/8
+    *** Failers
+No match
+    \x{100}
+No match
+
+/(?&lt;=aXb)cd/8
+    aXbcd
+ 0: cd
+
+/(?&lt;=a\x{100}b)cd/8
+    a\x{100}bcd
+ 0: cd
+
+/(?&lt;=a\x{100000}b)cd/8
+    a\x{100000}bcd
+ 0: cd
+    
+/(?:\x{100}){3}b/8
+    \x{100}\x{100}\x{100}b
+ 0: \x{100}\x{100}\x{100}b
+    *** Failers 
+No match
+    \x{100}\x{100}b
+No match
+
+/\x{ab}/8
+    \x{ab} 
+ 0: \x{ab}
+    \xc2\xab
+ 0: \x{ab}
+    *** Failers 
+No match
+    \x00{ab}
+No match
+
+/(?&lt;=(.))X/8
+    WXYZ
+ 0: X
+ 1: W
+    \x{256}XYZ 
+ 0: X
+ 1: \x{256}
+    *** Failers
+No match
+    XYZ 
+No match
+
+/X(\C{3})/8
+    X\x{1234}
+ 0: X\x{1234}
+ 1: \x{1234}
+
+/X(\C{4})/8
+    X\x{1234}YZ
+ 0: X\x{1234}Y
+ 1: \x{1234}Y
+    
+/X\C*/8
+    XYZabcdce
+ 0: XYZabcdce
+    
+/X\C*?/8
+    XYZabcde
+ 0: X
+    
+/X\C{3,5}/8
+    Xabcdefg   
+ 0: Xabcde
+    X\x{1234} 
+ 0: X\x{1234}
+    X\x{1234}YZ
+ 0: X\x{1234}YZ
+    X\x{1234}\x{512}  
+ 0: X\x{1234}\x{512}
+    X\x{1234}\x{512}YZ
+ 0: X\x{1234}\x{512}
+
+/X\C{3,5}?/8
+    Xabcdefg   
+ 0: Xabc
+    X\x{1234} 
+ 0: X\x{1234}
+    X\x{1234}YZ
+ 0: X\x{1234}
+    X\x{1234}\x{512}  
+ 0: X\x{1234}
+
+/[^a]+/8g
+    bcd
+ 0: bcd
+    \x{100}aY\x{256}Z 
+ 0: \x{100}
+ 0: Y\x{256}Z
+    
+/^[^a]{2}/8
+    \x{100}bc
+ 0: \x{100}b

+/^[^a]{2,}/8
+    \x{100}bcAa
+ 0: \x{100}bcA
+
+/^[^a]{2,}?/8
+    \x{100}bca
+ 0: \x{100}b
+
+/[^a]+/8ig
+    bcd
+ 0: bcd
+    \x{100}aY\x{256}Z 
+ 0: \x{100}
+ 0: Y\x{256}Z
+    
+/^[^a]{2}/8i
+    \x{100}bc
+ 0: \x{100}b

+/^[^a]{2,}/8i
+    \x{100}bcAa
+ 0: \x{100}bc
+
+/^[^a]{2,}?/8i
+    \x{100}bca
+ 0: \x{100}b
+
+/\x{100}{0,0}/8
+    abcd
+ 0: 

+/\x{100}?/8
+    abcd
+ 0: 
+    \x{100}\x{100} 
+ 0: \x{100}
+
+/\x{100}{0,3}/8 
+    \x{100}\x{100} 
+ 0: \x{100}\x{100}
+    \x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}\x{100}\x{100}
+    
+/\x{100}*/8
+    abce
+ 0: 
+    \x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}\x{100}\x{100}\x{100}
+
+/\x{100}{1,1}/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}
+
+/\x{100}{1,3}/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}\x{100}\x{100}
+
+/\x{100}+/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}\x{100}\x{100}\x{100}
+
+/\x{100}{3}/8
+    abcd\x{100}\x{100}\x{100}XX
+ 0: \x{100}\x{100}\x{100}
+
+/\x{100}{3,5}/8
+    abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+ 0: \x{100}\x{100}\x{100}\x{100}\x{100}
+
+/\x{100}{3,}/8
+    abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+ 0: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+
+/(?&lt;=a\x{100}{2}b)X/8+
+    Xyyya\x{100}\x{100}bXzzz
+ 0: X
+ 0+ zzz
+
+/\D*/8
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/\D*/8
+  \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
 \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 0: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{10
 0}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+
+/\D/8
+    1X2
+ 0: X
+    1\x{100}2 
+ 0: \x{100}
+  
+/&gt;\S/8
+    &gt; &gt;X Y
+ 0: &gt;X
+    &gt; &gt;\x{100} Y
+ 0: &gt;\x{100}
+  
+/\d/8
+    \x{100}3
+ 0: 3
+    
+/\s/8
+    \x{100} X
+ 0:  
+    
+/\D+/8
+    12abcd34
+ 0: abcd
+    *** Failers
+ 0: *** Failers
+    1234  
+No match
+
+/\D{2,3}/8
+    12abcd34
+ 0: abc
+    12ab34
+ 0: ab
+    *** Failers  
+ 0: ***
+    1234
+No match
+    12a34  
+No match
+
+/\D{2,3}?/8
+    12abcd34
+ 0: ab
+    12ab34
+ 0: ab
+    *** Failers  
+ 0: **
+    1234
+No match
+    12a34  
+No match
+
+/\d+/8
+    12abcd34
+ 0: 12
+    *** Failers
+No match
+
+/\d{2,3}/8
+    12abcd34
+ 0: 12
+    1234abcd
+ 0: 123
+    *** Failers  
+No match
+    1.4 
+No match
+
+/\d{2,3}?/8
+    12abcd34
+ 0: 12
+    1234abcd
+ 0: 12
+    *** Failers  
+No match
+    1.4 
+No match
+
+/\S+/8
+    12abcd34
+ 0: 12abcd34
+    *** Failers
+ 0: ***
+    \    \ 
+No match
+
+/\S{2,3}/8
+    12abcd34
+ 0: 12a
+    1234abcd
+ 0: 123
+    *** Failers
+ 0: ***
+    \     \  
+No match
+
+/\S{2,3}?/8
+    12abcd34
+ 0: 12
+    1234abcd
+ 0: 12
+    *** Failers
+ 0: **
+    \     \  
+No match
+
+/&gt;\s+&lt;/8+
+    12&gt;      &lt;34
+ 0: &gt;      &lt;
+ 0+ 34
+    *** Failers
+No match
+
+/&gt;\s{2,3}&lt;/8+
+    ab&gt;  &lt;cd
+ 0: &gt;  &lt;
+ 0+ cd
+    ab&gt;   &lt;ce
+ 0: &gt;   &lt;
+ 0+ ce
+    *** Failers
+No match
+    ab&gt;    &lt;cd 
+No match
+
+/&gt;\s{2,3}?&lt;/8+
+    ab&gt;  &lt;cd
+ 0: &gt;  &lt;
+ 0+ cd
+    ab&gt;   &lt;ce
+ 0: &gt;   &lt;
+ 0+ ce
+    *** Failers
+No match
+    ab&gt;    &lt;cd 
+No match
+
+/\w+/8
+    12      34
+ 0: 12
+    *** Failers
+ 0: Failers
+    +++=*! 
+No match
+
+/\w{2,3}/8
+    ab  cd
+ 0: ab
+    abcd ce
+ 0: abc
+    *** Failers
+ 0: Fai
+    a.b.c
+No match
+
+/\w{2,3}?/8
+    ab  cd
+ 0: ab
+    abcd ce
+ 0: ab
+    *** Failers
+ 0: Fa
+    a.b.c
+No match
+
+/\W+/8
+    12====34
+ 0: ====
+    *** Failers
+ 0: *** 
+    abcd 
+No match
+
+/\W{2,3}/8
+    ab====cd
+ 0: ===
+    ab==cd
+ 0: ==
+    *** Failers
+ 0: ***
+    a.b.c
+No match
+
+/\W{2,3}?/8
+    ab====cd
+ 0: ==
+    ab==cd
+ 0: ==
+    *** Failers
+ 0: **
+    a.b.c
+No match
+
+/[\x{100}]/8
+    \x{100}
+ 0: \x{100}
+    Z\x{100}
+ 0: \x{100}
+    \x{100}Z
+ 0: \x{100}
+    *** Failers 
+No match
+
+/[Z\x{100}]/8
+    Z\x{100}
+ 0: Z
+    \x{100}
+ 0: \x{100}
+    \x{100}Z
+ 0: \x{100}
+    *** Failers 
+No match
+
+/[\x{100}\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   *** Failers  
+No match
+
+/[\x{100}-\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{111}cd 
+ 0: \x{111}
+   *** Failers  
+No match
+
+/[z-\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{111}cd 
+ 0: \x{111}
+   abzcd
+ 0: z
+   ab|cd  
+ 0: |
+   *** Failers  
+No match
+
+/[Q\x{100}\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   Q? 
+ 0: Q
+   *** Failers  
+No match
+
+/[Q\x{100}-\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{111}cd 
+ 0: \x{111}
+   Q? 
+ 0: Q
+   *** Failers  
+No match
+
+/[Qz-\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{111}cd 
+ 0: \x{111}
+   abzcd
+ 0: z
+   ab|cd  
+ 0: |
+   Q? 
+ 0: Q
+   *** Failers  
+No match
+
+/[\x{100}\x{200}]{1,3}/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+   *** Failers  
+No match
+
+/[\x{100}\x{200}]{1,3}?/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}
+   *** Failers  
+No match
+
+/[Q\x{100}\x{200}]{1,3}/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+   *** Failers  
+No match
+
+/[Q\x{100}\x{200}]{1,3}?/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}
+   *** Failers  
+No match
+
+/(?&lt;=[\x{100}\x{200}])X/8
+    abc\x{200}X
+ 0: X
+    abc\x{100}X 
+ 0: X
+    *** Failers
+No match
+    X  
+No match
+
+/(?&lt;=[Q\x{100}\x{200}])X/8
+    abc\x{200}X
+ 0: X
+    abc\x{100}X 
+ 0: X
+    abQX 
+ 0: X
+    *** Failers
+No match
+    X  
+No match
+
+/(?&lt;=[\x{100}\x{200}]{3})X/8
+    abc\x{100}\x{200}\x{100}X
+ 0: X
+    *** Failers
+No match
+    abc\x{200}X
+No match
+    X  
+No match
+
+/[^\x{100}\x{200}]X/8
+    AX
+ 0: AX
+    \x{150}X
+ 0: \x{150}X
+    \x{500}X 
+ 0: \x{500}X
+    *** Failers
+No match
+    \x{100}X
+No match
+    \x{200}X   
+No match
+
+/[^Q\x{100}\x{200}]X/8
+    AX
+ 0: AX
+    \x{150}X
+ 0: \x{150}X
+    \x{500}X 
+ 0: \x{500}X
+    *** Failers
+No match
+    \x{100}X
+No match
+    \x{200}X   
+No match
+    QX 
+No match
+
+/[^\x{100}-\x{200}]X/8
+    AX
+ 0: AX
+    \x{500}X 
+ 0: \x{500}X
+    *** Failers
+No match
+    \x{100}X
+No match
+    \x{150}X
+No match
+    \x{200}X   
+No match
+
+/a\Cb/
+    aXb
+ 0: aXb
+    a\nb
+ 0: a\x0ab
+  
+/a\Cb/8
+    aXb
+ 0: aXb
+    a\nb
+ 0: a\x{0a}b
+    *** Failers 
+No match
+    a\x{100}b 
+No match
+
+/[z-\x{100}]/8i
+    z
+ 0: z
+    Z 
+ 0: Z
+    \x{100}
+ 0: \x{100}
+    *** Failers
+No match
+    \x{102}
+No match
+    y    
+No match
+
+/[\xFF]/
+    &gt;\xff&lt;
+ 0: \xff
+
+/[\xff]/8
+    &gt;\x{ff}&lt;
+ 0: \x{ff}
+
+/[^\xFF]/
+    XYZ
+ 0: X
+
+/[^\xff]/8
+    XYZ
+ 0: X
+    \x{123} 
+ 0: \x{123}
+
+/^[ac]*b/8
+  xb
+No match
+
+/^[ac\x{100}]*b/8
+  xb
+No match
+
+/^[^x]*b/8i
+  xb
+No match
+
+/^[^x]*b/8
+  xb
+No match
+  
+/^\d*b/8
+  xb 
+No match
+
+/(|a)/g8
+    catac
+ 0: 
+ 1: 
+ 0: 
+ 1: 
+ 0: a
+ 1: a
+ 0: 
+ 1: 
+ 0: 
+ 1: 
+ 0: a
+ 1: a
+ 0: 
+ 1: 
+ 0: 
+ 1: 
+    a\x{256}a 
+ 0: 
+ 1: 
+ 0: a
+ 1: a
+ 0: 
+ 1: 
+ 0: 
+ 1: 
+ 0: a
+ 1: a
+ 0: 
+ 1: 
+
+/^\x{85}$/8i
+    \x{85}
+ 0: \x{85}
+
+/^ሴ/8
+    ሴ 
+ 0: \x{1234}
+
+/^\ሴ/8
+    ሴ 
+ 0: \x{1234}
+
+&quot;(?s)(.{1,5})&quot;8
+    abcdefg
+ 0: abcde
+ 1: abcde
+    ab
+ 0: ab
+ 1: ab
+
+/a*\x{100}*\w/8
+    a 
+ 0: a
+
+/\S\S/8g
+    A\x{a3}BC
+ 0: A\x{a3}
+ 0: BC
+    
+/\S{2}/8g
+    A\x{a3}BC
+ 0: A\x{a3}
+ 0: BC
+    
+/\W\W/8g
+    +\x{a3}== 
+ 0: +\x{a3}
+ 0: ==
+
+/\W{2}/8g
+    +\x{a3}== 
+ 0: +\x{a3}
+ 0: ==
+
+/ End of testinput4 /
</ins></span></pre>
</div>
</div>

</body>
</html>