|
- # This set of tests is for features that are compatible with all versions of
- # Perl >= 5.10, in non-UTF mode. It should run clean for the 8-bit, 16-bit, and
- # 32-bit PCRE libraries, and also using the perltest.pl script.
-
- #forbid_utf
- #newline_default lf any anycrlf
- #perltest
-
- /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
- \= Expect no match
- The quick brown FOX
- No match
- 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
- \= Expect 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
- \= Expect 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
- \= Expect 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
- \= Expect 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
- \= Expect 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
- \= Expect no match
- bababbc
- No match
- babababc
- No match
-
- #/^\ca\cA\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
- \= Expect no match
- fthing
- No match
- [thing
- No match
- \\thing
- No match
-
- /^[]cde]/
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- \= Expect no match
- athing
- No match
- fthing
- No match
-
- /^[^ab\]cde]/
- fthing
- 0: f
- [thing
- 0: [
- \\thing
- 0: \
- \= Expect no match
- 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
- \= Expect no match
- ]thing
- No match
- cthing
- No match
- dthing
- No match
- ething
- No match
-
- # DLC - I don't get this one
- #/^\/
- #
- # 0: \x81
-
- #updated to handle 16-bits utf8
- /^ÿ/
- ÿ
- 0: \xc3\xbf
-
- /^[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
- \= Expect no match
- abc
- No match
-
- /^.*nter/
- enter
- 0: enter
- inter
- 0: inter
- uponter
- 0: uponter
-
- /^xxx[0-9]+$/
- xxx0
- 0: xxx0
- xxx1234
- 0: xxx1234
- \= Expect no match
- xxx
- No match
-
- /^.+[0-9][0-9][0-9]$/
- x123
- 0: x123
- x1234
- 0: x1234
- xx123
- 0: xx123
- 123456
- 0: 123456
- \= Expect no match
- 123
- No match
-
- /^.+?[0-9][0-9][0-9]$/
- x123
- 0: x123
- x1234
- 0: x1234
- xx123
- 0: xx123
- 123456
- 0: 123456
- \= Expect no match
- 123
- No match
-
- /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
- abc!pqr=apquxz.ixr.zzz.ac.uk
- 0: abc!pqr=apquxz.ixr.zzz.ac.uk
- 1: abc
- 2: pqr
- \= Expect 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: :
- \= Expect no match
- Fail without a colon
- 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
- \= Expect 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
- \= Expect 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
- \= Expect 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-
- \= Expect 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
- \= Expect 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
- \= Expect no match
- \"1234\" : things
- No match
-
- /^$/
- \
- 0:
- \= Expect no match
- A non-empty line
- No match
-
- / ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
- ab c
- 0: ab c
- \= Expect 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
- \= Expect 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
- \= Expect 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__
- \= Expect no match
- 1234567
- No match
-
- /^[aeiou\d]{4,5}$/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 12345
- aaaaa
- 0: aaaaa
- \= Expect 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
- \= Expect 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
- \= Expect 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
- \= Expect 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
- \= Expect no match
- abc
- No match
-
- /(?=^)abc/
- abc
- 0: abc
- \= Expect 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
- \= Expect 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
- \= Expect 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
-
- #.NET doesn't do octal with 1 number
-
- /^(cow|)\1(bell)/
- cowcowbell
- 0: cowcowbell
- 1: cow
- 2: bell
- bell
- 0: bell
- 1:
- 2: bell
- \= Expect no match
- cowbell
- No match
-
- /^\s/
- \040abc
- 0:
- \x0cabc
- 0: \x0c
- \nabc
- 0: \x0a
- \rabc
- 0: \x0d
- \tabc
- 0: \x09
- \= Expect 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:
- \= Expect no match
- acb
- No match
-
- /^(a|)\1+b/
- aab
- 0: aab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- \= Expect no match
- ab
- No match
-
- /^(a|)\1?b/
- ab
- 0: ab
- 1: a
- aab
- 0: aab
- 1: a
- b
- 0: b
- 1:
- \= Expect no match
- acb
- No match
-
- /^(a|)\1{2}b/
- aaab
- 0: aaab
- 1: a
- b
- 0: b
- 1:
- \= Expect 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:
- \= Expect no match
- ab
- No match
- aab
- No match
- aaaaab
- No match
-
- /ab{1,3}bc/
- abbbbc
- 0: abbbbc
- abbbc
- 0: abbbc
- abbc
- 0: abbc
- \= Expect 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
- \= Expect 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
- \= Expect 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
- \= Expect 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
- \= Expect no match
- abc\ndef
- No match
-
- /(?:b)|(?::+)/
- b::c
- 0: b
- c::b
- 0: ::
-
- /[-az]+/
- az-
- 0: az-
- \= Expect no match
- b
- No match
-
- /[az-]+/
- za-
- 0: za-
- \= Expect no match
- b
- No match
-
- /[a\-z]+/
- a-z
- 0: a-z
- \= Expect no match
- b
- No match
-
- /[a-z]+/
- abcdxyz
- 0: abcdxyz
-
- /[\d-]+/
- 12-34
- 0: 12-34
- \= Expect no match
- aaa
- No match
-
- /[\d-z]+/
- 12-34z
- 0: 12-34z
- \= Expect no match
- aaa
- No match
-
- /\x5c/
- \\
- 0: \
-
- /\x20Z/
- the Zoo
- 0: Z
- \= Expect no match
- Zulu
- No match
-
- /(abc)\1/i
- abcabc
- 0: abcabc
- 1: abc
- ABCabc
- 0: ABCabc
- 1: ABC
- abcABC
- 0: abcABC
- 1: abc
-
- /abc$/
- abc
- 0: abc
- abc\n
- 0: abc
- \= Expect no match
- abc\ndef
- No match
-
- /(abc)\123/
- abc\x53
- 0: abcS
- 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
-
- /^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/
- ABCDEFGHIHI
- 0: ABCDEFGHIHI
- 1: A
- 2: B
- 3: C
- 4: D
- 5: E
- 6: F
- 7: G
- 8: H
- 9: I
-
- /(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
-
- /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
- \= Expect no match
- 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
- \= Expect no match
- abk
- No match
-
- /[^k]{2,3}$/
- abc
- 0: abc
- kbc
- 0: bc
- kabc
- 0: abc
- \= Expect no match
- 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
- \= Expect 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
- \= Expect 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
-
- # trimmed upper ascii since Go is UTF-8
- /\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/
- \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
- 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
-
- /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
- \= Expect no match
- 1.235
- No match
-
- /\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
- \= Expect no match
- ABC123
- No match
-
- /^[W-]46]/
- W46]789
- 0: W46]
- -46]789
- 0: -46]
- \= Expect 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: \
- \= Expect 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
- \= Expect no match
- word cat dog elephant mussel cow horse canary baboon snake shark
- No match
-
- /word (?:[a-zA-Z0-9]+ ){0,300}otherword/
- \= Expect no match
- 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}/
- abc
- 0: a
- 1: a
- aab
- 0: a
- 1: a
- \= Expect no match
- bcd
- No match
-
- /^(a){1,2}/
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- \= Expect no match
- bcd
- No match
-
- /^(a){1,3}/
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- \= Expect no match
- bcd
- No match
-
- /^(a){1,}/
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: a
- \= Expect no match
- bcd
- No match
-
- /.*\.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
- \= Expect 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
- \= Expect 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
- \= Expect no match
- abcde\nBar
- No match
-
- /(?s:.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- BarFoo
- 0: B
- \= Expect no match
- abcde\nBar
- No match
-
- /^.*B/
- \= Expect 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
- \= Expect no match
- z
- No match
-
- /abcde{0,0}/
- abcd
- 0: abcd
- \= Expect no match
- abce
- No match
-
- /ab[cd]{0,0}e/
- abe
- 0: abe
- \= Expect no match
- abcde
- No match
-
- /ab(c){0,0}d/
- abd
- 0: abd
- \= Expect no match
- abcd
- No match
-
- /a(b*)/
- a
- 0: a
- 1:
- ab
- 0: ab
- 1: b
- abbbb
- 0: abbbb
- 1: bbbb
- \= Expect no match
- bbbbb
- No match
-
- /ab\d{0}e/
- abe
- 0: abe
- \= Expect 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
-
- /<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 1: BGCOLOR='#DBE9E9'
- 2: align=left valign=top
- 3: 43.
- 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
- 5:
- 6:
- 7: <unset>
- 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
- \= Expect 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
- a\bx\n
- 0: x
- a\nx\n
- 0: x
- \= Expect no match
- x\nb\n
- No match
-
- /(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
-
- /(?<!bar)foo/
- foo
- 0: foo
- catfood
- 0: foo
- arfootle
- 0: foo
- rfoosh
- 0: foo
- \= Expect no match
- barfoo
- No match
- towbarfoo
- No match
-
- /\w{3}(?<!bar)foo/
- catfood
- 0: catfoo
- \= Expect no match
- foo
- No match
- barfoo
- No match
- towbarfoo
- No match
-
- /(?<=(foo)a)bar/
- fooabar
- 0: bar
- 1: foo
- \= Expect no match
- bar
- No match
- foobbar
- No match
-
- /\Aabc\z/m
- abc
- 0: abc
- \= Expect no match
- abc\n
- No match
- qqq\nabc
- No match
- abc\nzzz
- No match
- qqq\nabc\nzzz
- No match
-
- "(?>.*/)foo"
- /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
- \= Expect no match
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
- No match
-
- /(?>(\.\d\d[1-9]?))\d+/
- 1.230003938
- 0: .230003938
- 1: .23
- 1.875000282
- 0: .875000282
- 1: .875
- \= Expect no match
- 1.235
- No match
-
- /^((?>\w+)|(?>\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
- \= Expect 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
-
- /((?>\d+))(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- \= Expect no match
- 12345+
- No match
-
- /(?>a+)b/
- aaab
- 0: aaab
-
- /((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
-
- /(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
-
- /(?>b)+/
- aaabbbccc
- 0: bbb
-
- /(?>a+|b+|c+)*c/
- aaabbbbccccd
- 0: aaabbbbc
-
- /((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
- /\(((?>[^()]+)|\([^()]+\))+\)/
- (abc)
- 0: (abc)
- 1: abc
- (abc(def)xyz)
- 0: (abc(def)xyz)
- 1: xyz
- \= Expect no match
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- No match
-
- /a(?-i)b/i
- ab
- 0: ab
- Ab
- 0: Ab
- \= Expect no match
- aB
- No match
- AB
- No match
-
- /(a (?x)b c)d e/
- a bcd e
- 0: a bcd e
- 1: a bc
- \= Expect 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
- \= Expect no match
- abcdef
- No match
-
- /(a(?i)b)c/
- abc
- 0: abc
- 1: ab
- aBc
- 0: aBc
- 1: aB
- \= Expect 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
- \= Expect no match
- ABC
- No match
- abC
- No match
- aBC
- No match
-
- /a(?i:b)*c/
- aBc
- 0: aBc
- aBBc
- 0: aBBc
- \= Expect no match
- aBC
- No match
- aBBC
- No match
-
- /a(?=b(?i)c)\w\wd/
- abcd
- 0: abcd
- abCd
- 0: abCd
- \= Expect 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
- \= Expect 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
- \= Expect no match
- MORE THAN MILLION
- No match
- more \n than \n million
- No match
-
- /(?>a(?i)b+)+c/
- abc
- 0: abc
- aBbc
- 0: aBbc
- aBBc
- 0: aBBc
- \= Expect no match
- Abc
- No match
- abAb
- No match
- abbC
- No match
-
- /(?=a(?i)b)\w\wc/
- abc
- 0: abc
- aBc
- 0: aBc
- \= Expect no match
- Ab
- No match
- abC
- No match
- aBC
- No match
-
- /(?<=a(?i)b)(\w\w)c/
- abxxc
- 0: xxc
- 1: xx
- aBxxc
- 0: xxc
- 1: xx
- \= Expect no match
- Abxxc
- No match
- ABxxc
- No match
- abxxC
- No match
-
- /(?:(a)|b)(?(1)A|B)/
- aA
- 0: aA
- 1: a
- bB
- 0: bB
- \= Expect no match
- aB
- No match
- bA
- No match
-
- /^(a)?(?(1)a|b)+$/
- aa
- 0: aa
- 1: a
- b
- 0: b
- bb
- 0: bb
- \= Expect no match
- ab
- No match
-
- # Perl gets this next one wrong if the pattern ends with $; in that case it
- # fails to match "12".
-
- /^(?(?=abc)\w{3}:|\d\d)/
- abc:
- 0: abc:
- 12
- 0: 12
- 123
- 0: 12
- \= Expect no match
- xyz
- No match
-
- /^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 0: abc:
- 12
- 0: 12
- \= Expect no match
- 123
- No match
- xyz
- No match
-
- /(?(?<=foo)bar|cat)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- \= Expect no match
- foocat
- No match
-
- /(?(?<!foo)cat|bar)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- \= Expect 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
- \= Expect 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
- \= Expect 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
-
- /(?>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:
-
- /(?>a*)*/
- a
- 0: a
- aaabcde
- 0: aaa
-
- /((?>a*))*/
- aaaaa
- 0: aaaaa
- 1:
- aabbaa
- 0: aa
- 1:
-
- /((?>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
- \= Expect no match
- sep-12-98
- No match
-
- /(?<=(foo))bar\1/
- foobarfoo
- 0: barfoo
- 1: foo
- foobarfootling
- 0: barfoo
- 1: foo
- \= Expect 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
- \= Expect 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
- \= Expect 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
- \= Expect no match
- aCD
- No match
- XY
- No match
-
- /(?<=foo\n)^bar/m
- foo\nbar
- 0: bar
- \= Expect no match
- bar
- No match
- baz\nbar
- No match
-
- /(?<=(?<!foo)bar)baz/
- barbaz
- 0: baz
- barbarbaz
- 0: baz
- koobarbaz
- 0: baz
- \= Expect no match
- baz
- No match
- foobarbaz
- No match
-
- # The cases of aaaa and aaaaaa are missed out below because Perl does things
- # differently. We know that odd, and maybe incorrect, things happen with
- # recursive references in Perl, as far as 5.11.3 - see some stuff in test #2.
-
- /^(a\1?){4}$/
- aaaaa
- 0: aaaaa
- 1: a
- aaaaaaa
- 0: aaaaaaa
- 1: a
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- \= Expect no match
- a
- No match
- aa
- No match
- aaa
- No match
- aaaaaaaa
- No match
- aaaaaaaaa
- No match
- 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?)$/
- 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
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: aaaa
- \= Expect no match
- a
- No match
- aa
- No match
- aaa
- No match
- aaaaaaaa
- No match
- aaaaaaaaa
- No match
- 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.
-
- /abc/
- abc
- 0: abc
- xabcy
- 0: abc
- ababc
- 0: abc
- \= Expect 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
- \= Expect 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/
- \= Expect 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
- \= Expect no match
- abbbbc
- No match
- abcc
- No match
-
- /^abc/
- abcc
- 0: abc
-
- /^abc$/
-
- /abc$/
- aabc
- 0: abc
- \= Expect no match
- 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
- \= Expect 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
- \= Expect no match
- abd
- No match
- abd
- No match
-
- /a[^-b]c/
- adc
- 0: adc
-
- /a[^]b]c/
- adc
- 0: adc
- a-c
- 0: a-c
- \= Expect no match
- a]c
- No match
-
- /\ba\b/
- a-
- 0: a
- -a
- 0: a
- -a-
- 0: a
-
- /\by\b/
- \= Expect no match
- xy
- No match
- yz
- No match
- xyz
- No match
-
- /\Ba\B/
- \= Expect no match
- 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: -
- \= Expect no match
- a
- No match
-
- /a\sb/
- a b
- 0: a b
-
- /a\Sb/
- a-b
- 0: a-b
- \= Expect no match
- a b
- No match
-
- /\d/
- 1
- 0: 1
-
- /\D/
- -
- 0: -
- \= Expect no match
- 1
- No match
-
- /[\w]/
- a
- 0: a
-
- /[\W]/
- -
- 0: -
- \= Expect no match
- a
- No match
-
- /a[\s]b/
- a b
- 0: a b
-
- /a[\S]b/
- a-b
- 0: a-b
- \= Expect no match
- a b
- No match
-
- /[\d]/
- 1
- 0: 1
-
- /[\D]/
- -
- 0: -
- \= Expect no match
- 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
- 0: a\b
-
- /((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/
- \= Expect no match
- b
- No match
-
- /a*/
- \
- 0:
-
- /([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/
- \= Expect 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
- \= Expect 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/
- \= Expect 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
- ab
- 0: a
- 1: a
- \= Expect no match
- 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
- \= Expect 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
- \= Expect 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
- \= Expect 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
- \= Expect 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
- AABC
- 0: AABC
- \= Expect no match
- AXYZD
- No match
-
- /a[bc]d/i
- ABD
- 0: ABD
-
- /a[b-d]e/i
- ACE
- 0: ACE
- \= Expect 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
- \= Expect 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
- \= Expect 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
- 0: A\b
- a\\B
- 0: a\B
-
- /((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])*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
- \= Expect no match
- 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
- \= Expect 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
- \= Expect 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: .
-
- /^[<>]&/
- <&OUT
- 0: <&
-
- /^(a\1?){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- \= Expect no match
- AB
- No match
- aaaaaaaaa
- No match
- aaaaaaaaaaa
- No match
-
- /^(a(?(1)\1)){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- \= Expect 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
-
- /(?<=a)b/
- ab
- 0: b
- \= Expect no match
- cb
- No match
- b
- No match
-
- /(?<!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/
- \= Expect 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/
- \= Expect 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
- aB
- 0: aB
- \= Expect no match
- Ab
- No match
- AB
- No match
-
- /(?-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
- \= Expect 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
- \= Expect no match
- Ab
- No match
- AB
- No match
-
- /((?-i:a))b/i
-
- /((?-i:a.))b/i
- \= Expect 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
-
- /(?<![cd])b/
- \= Expect no match
- B\nB
- No match
- dbcb
- No match
-
- /(?<![cd])[ab]/
- dbaacb
- 0: a
-
- /(?<!(c|d))b/
-
- /(?<!(c|d))[ab]/
- dbaacb
- 0: a
-
- /(?<!cd)[ab]/
- cdaccb
- 0: b
-
- /^(?:a?b?)*$/
- \
- 0:
- a
- 0: a
- ab
- 0: ab
- aaa
- 0: aaa
- \= Expect 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/
- \= Expect no match
- a\nb\nc\n
- No match
- a\nb\nc\n
- No match
-
- /((?m)^b)/
- a\nb\nc\n
- 0: b
- 1: b
-
- /(x)?(?(1)a|b)/
- \= Expect 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
- \= Expect no match
- a
- No match
- blah)
- No match
- (blah
- No match
-
- /^(\(+)?blah(?(1)(\)))$/
- (blah)
- 0: (blah)
- 1: (
- 2: )
- blah
- 0: blah
- \= Expect no match
- blah)
- No match
- (blah
- No match
-
- /(?(?!a)a|b)/
-
- /(?(?!a)b|a)/
- a
- 0: a
-
- /(?(?=a)b|a)/
- \= Expect 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:
-
- /$(?<=^(a))/
- a
- 0:
- 1: a
-
- /(?=(a+?))(\1ab)/
- aaab
- 0: aab
- 1: a
- 2: aab
-
- /^(?=(a+?))\1ab/
- \= Expect no match
- aaab
- No match
- aaab
- No match
-
- /([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- 1: <unset>
- 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: <unset>
- 2: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
- \= Expect no match
- abcd:
- No match
- abcd:
- No match
-
- /^[^bcd]*(c+)/
- aexycd
- 0: aexyc
- 1: c
-
- /(>a+)ab/
-
- /(?>a+)b/
- aaab
- 0: aaab
-
- /([[:]+)/
- a:[b]:
- 0: :[
- 1: :[
-
- /([[=]+)/
- a=[b]=
- 0: =[
- 1: =[
-
- /([[.]+)/
- a.[b].
- 0: .[
- 1: .[
-
- /((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
-
- /(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
-
- /((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
- /a\Z/
- \= Expect 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
-
- /^(?>(?(1)\.|())[^\W_](?>[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:
- \= Expect 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
-
- /(?>.*)(?<=(abcd|wxyz))/
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingwxyz
- 0: endingwxyz
- 1: wxyz
- \= Expect no match
- a rather long string that doesn't end with one of them
- No match
-
- /word (?>(?:(?!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
- \= Expect no match
- word cat dog elephant mussel cow horse canary baboon snake shark
- No match
-
- /word (?>[a-zA-Z0-9]+ ){0,30}otherword/
- \= Expect no match
- 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
-
- /(?<=\d{3}(?!999))foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- \= Expect no match
- 123abcfoo
- No match
-
- /(?<=(?!...999)\d{3})foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- \= Expect no match
- 123abcfoo
- No match
-
- /(?<=\d{3}(?!999)...)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- \= Expect no match
- 123999foo
- No match
-
- /(?<=\d{3}...)(?<!999)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- \= Expect no match
- 123999foo
- No match
-
- /<a[\s]+href[\s]*=[\s]* # find <a href=
- ([\"\'])? # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
- /isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href=\'abcd xyz pqr\' cats
- 0: <a href='abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
- /<a\s+href\s*=\s* # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
- /isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <a href = 'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
- /<a\s+href(?>\s*)=(?>\s*) # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
- /isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <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:
-
- /((?>Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
-
- /((?>)+|A)*/
- ZABCDEFG
- 0:
- 1:
-
- /^[\d-a]/
- abcde
- 0: a
- -things
- 0: -
- 0digit
- 0: 0
- \= Expect no match
- bcdef
- No match
-
- /[\s]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d\x0b
-
- /\s+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d\x0b
-
- /ab/x
- ab
- 0: ab
-
- /(?!\A)x/m
- a\nxb\n
- 0: x
-
- /(?!^)x/m
- \= Expect no match
- 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
- #\= Expect 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
- \= Expect no match
- xyzabc
- No match
-
- /a(?x: b c )d/
- XabcdY
- 0: abcd
- \= Expect 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
- \= Expect no match
- XabcY
- No match
-
- /((?i)AB(?-i)C|D)E/
- abCE
- 0: abCE
- 1: abC
- DE
- 0: DE
- 1: D
- \= Expect 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
- # 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
- /ix
- 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:
- \= Expect 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: ]
- #\= Expect no match
- # b
- #No match
-
- #TODO: PCRE has an optimization to make this workable, .NET does not
- #/(a+)*b/
- #\= Expect no match
- # aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- #No match
-
- # All these had to be updated because we understand unicode
- # and this looks like it's expecting single byte matches
-
- # .NET generates \xe4...not sure what's up, might just be different code pages
- /(?i)reg(?:ul(?:[aä]|ae)r|ex)/
- REGular
- 0: REGular
- regulaer
- 0: regulaer
- Regex
- 0: Regex
- regulär
- 0: regul\xc3\xa4r
-
- #/Åæåä[à-ÿÀ-ß]+/
- # Åæåäà
- # 0: \xc5\xe6\xe5\xe4\xe0
- # Åæåäÿ
- # 0: \xc5\xe6\xe5\xe4\xff
- # ÅæåäÀ
- # 0: \xc5\xe6\xe5\xe4\xc0
- # Åæåäß
- # 0: \xc5\xe6\xe5\xe4\xdf
-
- /(?<=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
- \= Expect no match
- abcddefg
- No match
-
- /(?<![^f]oo)(bar)/
- foobarX
- 0: bar
- 1: bar
- \= Expect no match
- boobarX
- No match
-
- /(?<![^f])X/
- offX
- 0: X
- \= Expect no match
- onyX
- No match
-
- /(?<=[^f])X/
- onyX
- 0: X
- \= Expect no match
- offX
- No match
-
- /(?:(?(1)a|b)(X))+/
- bXaX
- 0: bXaX
- 1: X
-
- /(?:(?(1)\1a|b)(X|Y))+/
- bXXaYYaY
- 0: bXXaYYaY
- 1: Y
- bXYaXXaX
- 0: bX
- 1: X
-
- # TODO: I think this is a difference caused by the
- # collision of group numbers, but not sure
- #/()()()()()()()()()(?:(?(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:
-
- "(?x)(?-x: \s*#\s*)"
- A # B
- 0: #
- \= Expect no match
- #
- No match
-
- "(?x-is)(?:(?-ixs) \s*#\s*) include"
- A #include
- 0: #include
- \= Expect 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
- #\= Expect no match
- # E
- #No match
-
- #/^[a-\Ec]/
- # b
- # 0: b
- #\= Expect no match
- # -
- #No match
- # E
- #No match
-
- #/^[a\E\E-\Ec]/
- # b
- # 0: b
- #\= Expect no match
- # -
- #No match
- # E
- #No match
-
- #/^[\E\Qa\E-\Qz\E]+/
- # b
- # 0: b
- #\= Expect 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: <unset>
- 2:
- D
- 0: D
- 1: <unset>
- 2:
-
- # this is really long with debug -- removing for now
- #/(a|)*\d/
- # aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- # 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- # 1:
- #\= Expect no match
- # aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- #No match
-
- /(?>a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- \= Expect no match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- No match
-
- /(?:a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- \= Expect no match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- No match
-
- /^(?s)(?>.*)(?<!\n)/
- abc
- 0: abc
- \= Expect no match
- abc\n
- No match
-
- /^(?![^\n]*\n\z)/
- abc
- 0:
- \= Expect no match
- abc\n
- No match
-
- /\z(?<!\n)/
- abc
- 0:
- \= Expect no match
- 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:
-
- /[[:abcd:xyz]]/
- a]
- 0: a]
- :]
- 0: :]
-
- /[abc[:x\]pqr]/
- a
- 0: a
- [
- 0: [
- :
- 0: :
- ]
- 0: ]
- p
- 0: p
-
- /.*[op][xyz]/
- \= Expect no match
- fooabcfoo
- No match
-
- /(?(?=.*b)b|^)/
- adc
- 0:
- abc
- 0: b
-
- /(?(?=^.*b)b|^)/
- adc
- 0:
- \= Expect no match
- abc
- No match
-
- /(?(?=.*b)b|^)*/
- adc
- 0:
- abc
- 0:
-
- /(?(?=.*b)b|^)+/
- adc
- 0:
- abc
- 0: b
-
- /(?(?=b).*b|^d)/
- abc
- 0: b
-
- /(?(?=.*b).*b|^d)/
- abc
- 0: ab
-
- /^%((?(?=[a])[^%])|b)*%$/
- %ab%
- 0: %ab%
- 1:
-
- /(?i)a(?-i)b|c/
- XabX
- 0: ab
- XAbX
- 0: Ab
- CcC
- 0: c
- \= Expect no match
- XABX
- No match
-
- /[\x00-\xff\s]+/
- \x0a\x0b\x0c\x0d
- 0: \x0a\x0b\x0c\x0d
-
- /(abc)\1/i
- \= Expect no match
- abc
- No match
-
- /(abc)\1/
- \= Expect no match
- abc
- No match
-
- /[^a]*/i
- 12abc
- 0: 12
- 12ABC
- 0: 12
-
- #Posses
- /[^a]*/i
- 12abc
- 0: 12
- 12ABC
- 0: 12
-
- /[^a]*?X/i
- \= Expect no match
- 12abc
- No match
- 12ABC
- No match
-
- /[^a]+?X/i
- \= Expect no match
- 12abc
- No match
- 12ABC
- No match
-
- /[^a]?X/i
- 12aXbcX
- 0: X
- 12AXBCX
- 0: X
- BCX
- 0: CX
-
- /[^a]??X/i
- 12aXbcX
- 0: X
- 12AXBCX
- 0: X
- BCX
- 0: CX
-
- /[^a]{2,3}/i
- abcdef
- 0: bcd
- ABCDEF
- 0: BCD
-
- /[^a]{2,3}?/i
- abcdef
- 0: bc
- ABCDEF
- 0: BC
-
- /((a|)+)+Z/
- Z
- 0: Z
- 1:
- 2:
-
- /(a)b|(a)c/
- ac
- 0: ac
- 1: <unset>
- 2: a
-
- /(?>(a))b|(a)c/
- ac
- 0: ac
- 1: <unset>
- 2: a
-
- /(?=(a))ab|(a)c/
- ac
- 0: ac
- 1: <unset>
- 2: a
-
- /((?>(a))b|(a)c)/
- ac
- 0: ac
- 1: ac
- 2: <unset>
- 3: a
-
- /(?=(?>(a))b|(a)c)(..)/
- ac
- 0: ac
- 1: <unset>
- 2: a
- 3: ac
-
- /(?>(?>(a))b|(a)c)/
- ac
- 0: ac
- 1: <unset>
- 2: a
-
- /((?>(a+)b)+(aabab))/
- aaaabaaabaabab
- 0: aaaabaaabaabab
- 1: aaaabaaabaabab
- 2: aaa
- 3: aabab
-
- /(?>a+|ab)+?c/
- \= Expect no match
- aabc
- No match
-
- /(?>a+|ab)+c/
- \= Expect no match
- aabc
- No match
-
- /(?:a+|ab)+c/
- aabc
- 0: aabc
-
- /^(?:a|ab)+c/
- aaaabc
- 0: aaaabc
-
- /(?=abc){0}xyz/
- xyz
- 0: xyz
-
- /(?=abc){1}xyz/
- \= Expect no match
- xyz
- No match
-
- /(?=(a))?./
- ab
- 0: a
- 1: a
- bc
- 0: b
-
- /(?=(a))??./
- ab
- 0: a
- bc
- 0: b
-
- /^(?!a){0}\w+/
- aaaaa
- 0: aaaaa
-
- /(?<=(abc))?xyz/
- abcxyz
- 0: xyz
- 1: abc
- pqrxyz
- 0: xyz
-
- /^[g<a>]+/
- ggg<<<aaa>>>
- 0: ggg<<<aaa>>>
- \= Expect no match
- \\ga
- No match
-
- /^[ga]+/
- gggagagaxyz
- 0: gggagaga
-
- /[:a]xxx[b:]/
- :xxx:
- 0: :xxx:
-
- /(?<=a{2})b/i
- xaabc
- 0: b
- \= Expect no match
- xabc
- No match
-
- /(?<!a{2})b/i
- xabc
- 0: b
- \= Expect no match
- xaabc
- No match
-
- /(?<=[^a]{2})b/
- axxbc
- 0: b
- aAAbc
- 0: b
- \= Expect no match
- xaabc
- No match
-
- /(?<=[^a]{2})b/i
- axxbc
- 0: b
- \= Expect no match
- aAAbc
- No match
- xaabc
- No match
-
- #/(?|(abc)|(xyz))\1/
- # abcabc
- # 0: abcabc
- # 1: abc
- # xyzxyz
- # 0: xyzxyz
- # 1: xyz
- #\= Expect no match
- # abcxyz
- #No match
- # xyzabc
- #No match
-
- #/(?|(abc)|(xyz))(?1)/
- # abcabc
- # 0: abcabc
- # 1: abc
- # xyzabc
- # 0: xyzabc
- # 1: xyz
- #\= Expect no match
- # xyzxyz
- #No match
-
- #/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
- # XYabcdY
- # 0: XYabcdY
- # 1: a
- # 2: b
- # 3: c
- # 4: d
- # 5: Y
-
- #/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
- # XYabcdY
- # 0: XYabcdY
- # 1: a
- # 2: b
- # 3: <unset>
- # 4: <unset>
- # 5: c
- # 6: d
- # 7: Y
-
- #/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
- # XYabcdY
- # 0: XYabcdY
- # 1: a
- # 2: b
- # 3: <unset>
- # 4: <unset>
- # 5: c
- # 6: d
- # 7: Y
-
- /(?'abc'\w+):\k<abc>{2}/
- a:aaxyz
- 0: a:aa
- 1: a
- ab:ababxyz
- 0: ab:abab
- 1: ab
- \= Expect no match
- a:axyz
- No match
- ab:abxyz
- No match
-
- /^(?<ab>a)? (?(ab)b|c) (?(ab)d|e)/x
- abd
- 0: abd
- 1: a
- ce
- 0: ce
-
- # .NET has more consistent grouping numbers with these dupe groups for the two options
- /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?(quote)[a-z]+|[0-9]+)/x,dupnames
- a\"aaaaa
- 0: a"aaaaa
- 1: "
- 2: <unset>
- 3: "
- b\"aaaaa
- 0: b"aaaaa
- 1: "
- 2: <unset>
- 3: "
- \= Expect no match
- b\"11111
- No match
-
- #/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
- # 0
- # 0: 0
- # 1: 0
- # 00
- # 0: 00
- # 1: 00
- # 2: 0
- # 0000
- # 0: 0000
- # 1: 0000
- # 2: 0
-
- #/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
- # 0
- # 0: 0
- # 1: 0
- # 2: 0
- # 00
- # 0: 0
- # 1: 0
- # 2: 0
- # 0000
- # 0: 0
- # 1: 0
- # 2: 0
-
- # Check the use of names for failure
-
- # Check opening parens in comment when seeking forward reference.
-
- #/(?P<abn>(?P=abn)xxx|)+/
- # xxx
- # 0:
- # 1:
-
- #Posses
- /^(a)?(\w)/
- aaaaX
- 0: aa
- 1: a
- 2: a
- YZ
- 0: Y
- 1: <unset>
- 2: Y
-
- #Posses
- /^(?:a)?(\w)/
- aaaaX
- 0: aa
- 1: a
- YZ
- 0: Y
- 1: Y
-
- /\A.*?(a|bc)/
- ba
- 0: ba
- 1: a
-
- /\A.*?(?:a|bc|d)/
- ba
- 0: ba
-
- # --------------------------
-
- /(another)?(\1?)test/
- hello world test
- 0: test
- 1: <unset>
- 2:
-
- /(another)?(\1+)test/
- \= Expect no match
- hello world test
- No match
-
- /((?:a?)*)*c/
- aac
- 0: aac
- 1:
-
- /((?>a?)*)*c/
- aac
- 0: aac
- 1:
-
- /(?>.*?a)(?<=ba)/
- aba
- 0: ba
-
- /(?:.*?a)(?<=ba)/
- aba
- 0: aba
-
- /(?>.*?a)b/s
- aab
- 0: ab
-
- /(?>.*?a)b/
- aab
- 0: ab
-
- /(?>^a)b/s
- \= Expect no match
- aab
- No match
-
- /(?>.*?)(?<=(abcd)|(wxyz))/
- alphabetabcd
- 0:
- 1: abcd
- endingwxyz
- 0:
- 1: <unset>
- 2: wxyz
-
- /(?>.*)(?<=(abcd)|(wxyz))/
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingwxyz
- 0: endingwxyz
- 1: <unset>
- 2: wxyz
-
- "(?>.*)foo"
- \= Expect no match
- abcdfooxyz
- No match
-
- "(?>.*?)foo"
- abcdfooxyz
- 0: foo
-
- # Tests that try to figure out how Perl works. My hypothesis is that the first
- # verb that is backtracked onto is the one that acts. This seems to be the case
- # almost all the time, but there is one exception that is perhaps a bug.
-
- /a(?=bc).|abd/
- abd
- 0: abd
- abc
- 0: ab
-
- /a(?>bc)d|abd/
- abceabd
- 0: abd
-
- # These tests were formerly in test 2, but changes in PCRE and Perl have
- # made them compatible.
-
- /^(a)?(?(1)a|b)+$/
- \= Expect no match
- a
- No match
-
- # ----
-
- /^\d*\w{4}/
- 1234
- 0: 1234
- \= Expect no match
- 123
- No match
-
- /^[^b]*\w{4}/
- aaaa
- 0: aaaa
- \= Expect no match
- aaa
- No match
-
- /^[^b]*\w{4}/i
- aaaa
- 0: aaaa
- \= Expect no match
- aaa
- No match
-
- /^a*\w{4}/
- aaaa
- 0: aaaa
- \= Expect no match
- aaa
- No match
-
- /^a*\w{4}/i
- aaaa
- 0: aaaa
- \= Expect no match
- aaa
- No match
-
- /(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
- foofoo
- 0: foofoo
- 1: foo
- barbar
- 0: barbar
- 1: bar
-
- # A notable difference between PCRE and .NET. According to
- # the PCRE docs:
- # If you make a subroutine call to a non-unique named
- # subpattern, the one that corresponds to the first
- # occurrence of the name is used. In the absence of
- # duplicate numbers (see the previous section) this is
- # the one with the lowest number.
- # .NET takes the most recently captured number according to MSDN:
- # A backreference refers to the most recent definition of
- # a group (the definition most immediately to the left,
- # when matching left to right). When a group makes multiple
- # captures, a backreference refers to the most recent capture.
-
- #/(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
- # AfooA
- # 0: AfooA
- # 1: A
- # 2: foo
- # AbarA
- # 0: AbarA
- # 1: A
- # 2: <unset>
- # 3: bar
- #\= Expect no match
- # Afoofoo
- #No match
- # Abarbar
- #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
-
- # TODO: .NET's group number ordering here in the second example is a bit odd
- /^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?(A)x) (?(B)y)$/x,dupnames
- Ax
- 0: Ax
- 1: A
- BAxy
- 0: BAxy
- 1: A
- 2: B
-
- / ^ a + b $ /x
- aaaab
- 0: aaaab
-
- / ^ a + #comment
- b $ /x
- aaaab
- 0: aaaab
-
- / ^ a + #comment
- #comment
- b $ /x
- aaaab
- 0: aaaab
-
- / ^ (?> a + ) b $ /x
- aaaab
- 0: aaaab
-
- / ^ ( a + ) + \w $ /x
- aaaab
- 0: aaaab
- 1: aaaa
-
- /(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
- \= Expect no match
- acb
- No match
-
- #Posses
- #/\A(?:[^\"]+|\"(?:[^\"]*|\"\")*\")+/
- # NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
- # 0: NON QUOTED "QUOT""ED" AFTER
-
- #Posses
- #/\A(?:[^\"]+|\"(?:[^\"]+|\"\")*\")+/
- # NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
- # 0: NON QUOTED "QUOT""ED" AFTER
-
- #Posses
- #/\A(?:[^\"]+|\"(?:[^\"]+|\"\")+\")+/
- # NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
- # 0: NON QUOTED "QUOT""ED" AFTER
-
- #Posses
- #/\A([^\"1]+|[\"2]([^\"3]*|[\"4][\"5])*[\"6])+/
- # NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
- # 0: NON QUOTED "QUOT""ED" AFTER
- # 1: AFTER
- # 2:
-
- /^\w+(?>\s*)(?<=\w)/
- test test
- 0: tes
-
- #/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
- # acl
- # 0: acl
- # 1: a
- # bdl
- # 0: bdl
- # 1: <unset>
- # 2: b
- # adl
- # 0: dl
- # bcl
- # 0: l
-
- /\sabc/
- \x0babc
- 0: \x0babc
-
- #/[\Qa]\E]+/
- # aa]]
- # 0: aa]]
-
- #/[\Q]a\E]+/
- # aa]]
- # 0: aa]]
-
- /A((((((((a))))))))\8B/
- AaaB
- 0: AaaB
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
-
- /A(((((((((a)))))))))\9B/
- AaaB
- 0: AaaB
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-
- /(|ab)*?d/
- abd
- 0: abd
- 1: ab
- xyd
- 0: d
-
- /(\2|a)(\1)/
- aaa
- 0: aa
- 1: a
- 2: a
-
- /(\2)(\1)/
-
- "Z*(|d*){216}"
-
- /((((((((((((x))))))))))))\12/
- xx
- 0: xx
- 1: x
- 2: x
- 3: x
- 4: x
- 5: x
- 6: x
- 7: x
- 8: x
- 9: x
- 10: x
- 11: x
- 12: x
-
- #"(?|(\k'Pm')|(?'Pm'))"
- # abcd
- # 0:
- # 1:
-
- #/(?|(aaa)|(b))\g{1}/
- # aaaaaa
- # 0: aaaaaa
- # 1: aaa
- # bb
- # 0: bb
- # 1: b
-
- #/(?|(aaa)|(b))(?1)/
- # aaaaaa
- # 0: aaaaaa
- # 1: aaa
- # baaa
- # 0: baaa
- # 1: b
- #\= Expect no match
- # bb
- #No match
-
- #/(?|(aaa)|(b))/
- # xaaa
- # 0: aaa
- # 1: aaa
- # xbc
- # 0: b
- # 1: b
-
- #/(?|(?'a'aaa)|(?'a'b))\k'a'/
- # aaaaaa
- # 0: aaaaaa
- # 1: aaa
- # bb
- # 0: bb
- # 1: b
-
- #/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames
- # aaaccccaaa
- # 0: aaaccccaaa
- # 1: aaa
- # 2: cccc
- # bccccb
- # 0: bccccb
- # 1: b
- # 2: cccc
-
- # End of testinput1
|