| PCRE version 3.1 09-Feb-2000 |
| |
| /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 |
| >>>aaabxyzpqrrrabbxyyyypqAzz |
| 0: aaabxyzpqrrrabbxyyyypqAzz |
| >aaaabxyzpqrrrabbxyyyypqAzz |
| 0: aaaabxyzpqrrrabbxyyyypqAzz |
| >>>>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 |
| >>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: <unset> |
| 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 |
| |
| /^\".*\"\s*(;.*)?$/ |
| \"1234\" |
| 0: "1234" |
| \"abcd\" ; |
| 0: "abcd" ; |
| 1: ; |
| \"\" ; rhubarb |
| 0: "" ; rhubarb |
| 1: ; rhubarb |
| *** Failers |
| No match |
| \"1234\" : 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: <unset> |
| 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 |
| |
| / (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* # optional leading comment |
| (?: (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| " (?: # opening quote... |
| [^\\\x80-\xff\n\015"] # Anything except backslash and quote |
| | # or |
| \\ [^\x80-\xff] # Escaped something (something != CR) |
| )* " # closing quote |
| ) # initial word |
| (?: (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* \. (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| " (?: # opening quote... |
| [^\\\x80-\xff\n\015"] # Anything except backslash and quote |
| | # or |
| \\ [^\x80-\xff] # Escaped something (something != CR) |
| )* " # closing quote |
| ) )* # further okay, if led by a period |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* @ (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) # initial subdomain |
| (?: # |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* \. # if led by a period... |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) # ...further okay |
| )* |
| # address |
| | # or |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| " (?: # opening quote... |
| [^\\\x80-\xff\n\015"] # Anything except backslash and quote |
| | # or |
| \\ [^\x80-\xff] # Escaped something (something != CR) |
| )* " # closing quote |
| ) # one word, optionally followed by.... |
| (?: |
| [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or... |
| \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) | # comments, or... |
| |
| " (?: # opening quote... |
| [^\\\x80-\xff\n\015"] # Anything except backslash and quote |
| | # or |
| \\ [^\x80-\xff] # Escaped something (something != CR) |
| )* " # closing quote |
| # quoted strings |
| )* |
| < (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* # leading < |
| (?: @ (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) # initial subdomain |
| (?: # |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* \. # if led by a period... |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) # ...further okay |
| )* |
| |
| (?: (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* , (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* @ (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) # initial subdomain |
| (?: # |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* \. # if led by a period... |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) # ...further okay |
| )* |
| )* # further okay, if led by comma |
| : # closing colon |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* )? # optional route |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| " (?: # opening quote... |
| [^\\\x80-\xff\n\015"] # Anything except backslash and quote |
| | # or |
| \\ [^\x80-\xff] # Escaped something (something != CR) |
| )* " # closing quote |
| ) # initial word |
| (?: (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* \. (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| " (?: # opening quote... |
| [^\\\x80-\xff\n\015"] # Anything except backslash and quote |
| | # or |
| \\ [^\x80-\xff] # Escaped something (something != CR) |
| )* " # closing quote |
| ) )* # further okay, if led by a period |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* @ (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) # initial subdomain |
| (?: # |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* \. # if led by a period... |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) # ...further okay |
| )* |
| # address spec |
| (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* > # trailing > |
| # name and address |
| ) (?: [\040\t] | \( |
| (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* |
| \) )* # optional trailing comment |
| /x |
| Alan Other <user\@dom.ain> |
| 0: Alan Other <user@dom.ain> |
| <user\@dom.ain> |
| 0: user@dom.ain |
| user\@dom.ain |
| 0: user@dom.ain |
| \"A. Other\" <user.1234\@dom.ain> (a comment) |
| 0: "A. Other" <user.1234@dom.ain> (a comment) |
| A. Other <user.1234\@dom.ain> (a comment) |
| 0: Other <user.1234@dom.ain> (a comment) |
| \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay |
| 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay |
| A missing angle <user\@some.where |
| 0: user@some.where |
| *** Failers |
| No match |
| The quick brown fox |
| No match |
| |
| /[\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional leading comment |
| (?: |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| # Atom |
| | # or |
| " # " |
| [^\\\x80-\xff\n\015"] * # normal |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* |
| " # " |
| # Quoted string |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| \. |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| # Atom |
| | # or |
| " # " |
| [^\\\x80-\xff\n\015"] * # normal |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* |
| " # " |
| # Quoted string |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # additional words |
| )* |
| @ |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional trailing comments |
| (?: |
| \. |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional trailing comments |
| )* |
| # address |
| | # or |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| # Atom |
| | # or |
| " # " |
| [^\\\x80-\xff\n\015"] * # normal |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* |
| " # " |
| # Quoted string |
| ) |
| # leading word |
| [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces |
| (?: |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| | |
| " # " |
| [^\\\x80-\xff\n\015"] * # normal |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* |
| " # " |
| ) # "special" comment or quoted string |
| [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal" |
| )* |
| < |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # < |
| (?: |
| @ |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional trailing comments |
| (?: |
| \. |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional trailing comments |
| )* |
| (?: , |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| @ |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional trailing comments |
| (?: |
| \. |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional trailing comments |
| )* |
| )* # additional domains |
| : |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional trailing comments |
| )? # optional route |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| # Atom |
| | # or |
| " # " |
| [^\\\x80-\xff\n\015"] * # normal |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* |
| " # " |
| # Quoted string |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| \. |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| # Atom |
| | # or |
| " # " |
| [^\\\x80-\xff\n\015"] * # normal |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* |
| " # " |
| # Quoted string |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # additional words |
| )* |
| @ |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional trailing comments |
| (?: |
| \. |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| (?: |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom |
| | |
| \[ # [ |
| (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff |
| \] # ] |
| ) |
| [\040\t]* # Nab whitespace. |
| (?: |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: # ( |
| (?: \\ [^\x80-\xff] | |
| \( # ( |
| [^\\\x80-\xff\n\015()] * # normal* |
| (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* |
| \) # ) |
| ) # special |
| [^\\\x80-\xff\n\015()] * # normal* |
| )* # )* |
| \) # ) |
| [\040\t]* )* # If comment found, allow more spaces. |
| # optional trailing comments |
| )* |
| # address spec |
| > # > |
| # name and address |
| ) |
| /x |
| Alan Other <user\@dom.ain> |
| 0: Alan Other <user@dom.ain> |
| <user\@dom.ain> |
| 0: user@dom.ain |
| user\@dom.ain |
| 0: user@dom.ain |
| \"A. Other\" <user.1234\@dom.ain> (a comment) |
| 0: "A. Other" <user.1234@dom.ain> |
| A. Other <user.1234\@dom.ain> (a comment) |
| 0: Other <user.1234@dom.ain> |
| \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay |
| 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay |
| A missing angle <user\@some.where |
| 0: user@some.where |
| *** Failers |
| No match |
| The quick brown fox |
| No match |
| |
| /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 |
| |
| /(main(O)?)+/ |
| mainmain |
| 0: mainmain |
| 1: main |
| mainOmain |
| 0: mainOmain |
| 1: main |
| 2: O |
| |
| /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 |
| |
| /^a.b/ |
| a\rb |
| 0: a\x0db |
| *** Failers |
| No match |
| a\nb |
| No match |
| |
| /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)\500/ |
| abc\x40 |
| 0: abc@ |
| 1: abc |
| abc\100 |
| 0: abc@ |
| 1: abc |
| |
| /(abc)\5000/ |
| 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\gdef/ |
| abgdef |
| 0: abgdef |
| |
| /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 |
| |
| /a.b(?s)/ |
| 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 !"#$%&'()*+,-./0123456789:;<=>?@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 |
| |
| /"([^\\"]+|\\.)*"/ |
| the \"quick\" brown fox |
| 0: "quick" |
| 1: quick |
| \"the \\\"quick\\\" brown fox\" |
| 0: "the \"quick\" brown fox" |
| 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: |
| |
| / End of test input / |
| |