mirror of
https://github.com/php/php-src.git
synced 2024-10-15 13:32:39 +00:00
2926 lines
63 KiB
Plaintext
2926 lines
63 KiB
Plaintext
|
PCRE version 3.1 09-Feb-2000
|
|||
|
|
|||
|
/the quick brown fox/
|
|||
|
the quick brown fox
|
|||
|
0: the quick brown fox
|
|||
|
The quick brown FOX
|
|||
|
No match
|
|||
|
What do you know about the quick brown fox?
|
|||
|
0: the quick brown fox
|
|||
|
What do you know about THE QUICK BROWN FOX?
|
|||
|
No match
|
|||
|
|
|||
|
/The quick brown fox/i
|
|||
|
the quick brown fox
|
|||
|
0: the quick brown fox
|
|||
|
The quick brown FOX
|
|||
|
0: The quick brown FOX
|
|||
|
What do you know about the quick brown fox?
|
|||
|
0: the quick brown fox
|
|||
|
What do you know about THE QUICK BROWN FOX?
|
|||
|
0: THE QUICK BROWN FOX
|
|||
|
|
|||
|
/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
|
|||
|
abcd\t\n\r\f\a\e9;\$\\?caxyz
|
|||
|
0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
|
|||
|
|
|||
|
/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
|
|||
|
abxyzpqrrrabbxyyyypqAzz
|
|||
|
0: abxyzpqrrrabbxyyyypqAzz
|
|||
|
abxyzpqrrrabbxyyyypqAzz
|
|||
|
0: abxyzpqrrrabbxyyyypqAzz
|
|||
|
aabxyzpqrrrabbxyyyypqAzz
|
|||
|
0: aabxyzpqrrrabbxyyyypqAzz
|
|||
|
aaabxyzpqrrrabbxyyyypqAzz
|
|||
|
0: aaabxyzpqrrrabbxyyyypqAzz
|
|||
|
aaaabxyzpqrrrabbxyyyypqAzz
|
|||
|
0: aaaabxyzpqrrrabbxyyyypqAzz
|
|||
|
abcxyzpqrrrabbxyyyypqAzz
|
|||
|
0: abcxyzpqrrrabbxyyyypqAzz
|
|||
|
aabcxyzpqrrrabbxyyyypqAzz
|
|||
|
0: aabcxyzpqrrrabbxyyyypqAzz
|
|||
|
aaabcxyzpqrrrabbxyyyypAzz
|
|||
|
0: aaabcxyzpqrrrabbxyyyypAzz
|
|||
|
aaabcxyzpqrrrabbxyyyypqAzz
|
|||
|
0: aaabcxyzpqrrrabbxyyyypqAzz
|
|||
|
aaabcxyzpqrrrabbxyyyypqqAzz
|
|||
|
0: aaabcxyzpqrrrabbxyyyypqqAzz
|
|||
|
aaabcxyzpqrrrabbxyyyypqqqAzz
|
|||
|
0: aaabcxyzpqrrrabbxyyyypqqqAzz
|
|||
|
aaabcxyzpqrrrabbxyyyypqqqqAzz
|
|||
|
0: aaabcxyzpqrrrabbxyyyypqqqqAzz
|
|||
|
aaabcxyzpqrrrabbxyyyypqqqqqAzz
|
|||
|
0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
|
|||
|
aaabcxyzpqrrrabbxyyyypqqqqqqAzz
|
|||
|
0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
|
|||
|
aaaabcxyzpqrrrabbxyyyypqAzz
|
|||
|
0: aaaabcxyzpqrrrabbxyyyypqAzz
|
|||
|
abxyzzpqrrrabbxyyyypqAzz
|
|||
|
0: abxyzzpqrrrabbxyyyypqAzz
|
|||
|
aabxyzzzpqrrrabbxyyyypqAzz
|
|||
|
0: aabxyzzzpqrrrabbxyyyypqAzz
|
|||
|
aaabxyzzzzpqrrrabbxyyyypqAzz
|
|||
|
0: aaabxyzzzzpqrrrabbxyyyypqAzz
|
|||
|
aaaabxyzzzzpqrrrabbxyyyypqAzz
|
|||
|
0: aaaabxyzzzzpqrrrabbxyyyypqAzz
|
|||
|
abcxyzzpqrrrabbxyyyypqAzz
|
|||
|
0: abcxyzzpqrrrabbxyyyypqAzz
|
|||
|
aabcxyzzzpqrrrabbxyyyypqAzz
|
|||
|
0: aabcxyzzzpqrrrabbxyyyypqAzz
|
|||
|
aaabcxyzzzzpqrrrabbxyyyypqAzz
|
|||
|
0: aaabcxyzzzzpqrrrabbxyyyypqAzz
|
|||
|
aaaabcxyzzzzpqrrrabbxyyyypqAzz
|
|||
|
0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
|
|||
|
aaaabcxyzzzzpqrrrabbbxyyyypqAzz
|
|||
|
0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
|
|||
|
aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
|
|||
|
0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
|
|||
|
aaabcxyzpqrrrabbxyyyypABzz
|
|||
|
0: aaabcxyzpqrrrabbxyyyypABzz
|
|||
|
aaabcxyzpqrrrabbxyyyypABBzz
|
|||
|
0: aaabcxyzpqrrrabbxyyyypABBzz
|
|||
|
>>>aaabxyzpqrrrabbxyyyypqAzz
|
|||
|
0: aaabxyzpqrrrabbxyyyypqAzz
|
|||
|
>aaaabxyzpqrrrabbxyyyypqAzz
|
|||
|
0: aaaabxyzpqrrrabbxyyyypqAzz
|
|||
|
>>>>abcxyzpqrrrabbxyyyypqAzz
|
|||
|
0: abcxyzpqrrrabbxyyyypqAzz
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abxyzpqrrabbxyyyypqAzz
|
|||
|
No match
|
|||
|
abxyzpqrrrrabbxyyyypqAzz
|
|||
|
No match
|
|||
|
abxyzpqrrrabxyyyypqAzz
|
|||
|
No match
|
|||
|
aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
|
|||
|
No match
|
|||
|
aaaabcxyzzzzpqrrrabbbxyyypqAzz
|
|||
|
No match
|
|||
|
aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
|
|||
|
No match
|
|||
|
|
|||
|
/^(abc){1,2}zz/
|
|||
|
abczz
|
|||
|
0: abczz
|
|||
|
1: abc
|
|||
|
abcabczz
|
|||
|
0: abcabczz
|
|||
|
1: abc
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
zz
|
|||
|
No match
|
|||
|
abcabcabczz
|
|||
|
No match
|
|||
|
>>abczz
|
|||
|
No match
|
|||
|
|
|||
|
/^(b+?|a){1,2}?c/
|
|||
|
bc
|
|||
|
0: bc
|
|||
|
1: b
|
|||
|
bbc
|
|||
|
0: bbc
|
|||
|
1: b
|
|||
|
bbbc
|
|||
|
0: bbbc
|
|||
|
1: bb
|
|||
|
bac
|
|||
|
0: bac
|
|||
|
1: a
|
|||
|
bbac
|
|||
|
0: bbac
|
|||
|
1: a
|
|||
|
aac
|
|||
|
0: aac
|
|||
|
1: a
|
|||
|
abbbbbbbbbbbc
|
|||
|
0: abbbbbbbbbbbc
|
|||
|
1: bbbbbbbbbbb
|
|||
|
bbbbbbbbbbbac
|
|||
|
0: bbbbbbbbbbbac
|
|||
|
1: a
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
aaac
|
|||
|
No match
|
|||
|
abbbbbbbbbbbac
|
|||
|
No match
|
|||
|
|
|||
|
/^(b+|a){1,2}c/
|
|||
|
bc
|
|||
|
0: bc
|
|||
|
1: b
|
|||
|
bbc
|
|||
|
0: bbc
|
|||
|
1: bb
|
|||
|
bbbc
|
|||
|
0: bbbc
|
|||
|
1: bbb
|
|||
|
bac
|
|||
|
0: bac
|
|||
|
1: a
|
|||
|
bbac
|
|||
|
0: bbac
|
|||
|
1: a
|
|||
|
aac
|
|||
|
0: aac
|
|||
|
1: a
|
|||
|
abbbbbbbbbbbc
|
|||
|
0: abbbbbbbbbbbc
|
|||
|
1: bbbbbbbbbbb
|
|||
|
bbbbbbbbbbbac
|
|||
|
0: bbbbbbbbbbbac
|
|||
|
1: a
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
aaac
|
|||
|
No match
|
|||
|
abbbbbbbbbbbac
|
|||
|
No match
|
|||
|
|
|||
|
/^(b+|a){1,2}?bc/
|
|||
|
bbc
|
|||
|
0: bbc
|
|||
|
1: b
|
|||
|
|
|||
|
/^(b*|ba){1,2}?bc/
|
|||
|
babc
|
|||
|
0: babc
|
|||
|
1: ba
|
|||
|
bbabc
|
|||
|
0: bbabc
|
|||
|
1: ba
|
|||
|
bababc
|
|||
|
0: bababc
|
|||
|
1: ba
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
bababbc
|
|||
|
No match
|
|||
|
babababc
|
|||
|
No match
|
|||
|
|
|||
|
/^(ba|b*){1,2}?bc/
|
|||
|
babc
|
|||
|
0: babc
|
|||
|
1: ba
|
|||
|
bbabc
|
|||
|
0: bbabc
|
|||
|
1: ba
|
|||
|
bababc
|
|||
|
0: bababc
|
|||
|
1: ba
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
bababbc
|
|||
|
No match
|
|||
|
babababc
|
|||
|
No match
|
|||
|
|
|||
|
/^\ca\cA\c[\c{\c:/
|
|||
|
\x01\x01\e;z
|
|||
|
0: \x01\x01\x1b;z
|
|||
|
|
|||
|
/^[ab\]cde]/
|
|||
|
athing
|
|||
|
0: a
|
|||
|
bthing
|
|||
|
0: b
|
|||
|
]thing
|
|||
|
0: ]
|
|||
|
cthing
|
|||
|
0: c
|
|||
|
dthing
|
|||
|
0: d
|
|||
|
ething
|
|||
|
0: e
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
fthing
|
|||
|
No match
|
|||
|
[thing
|
|||
|
No match
|
|||
|
\\thing
|
|||
|
No match
|
|||
|
|
|||
|
/^[]cde]/
|
|||
|
]thing
|
|||
|
0: ]
|
|||
|
cthing
|
|||
|
0: c
|
|||
|
dthing
|
|||
|
0: d
|
|||
|
ething
|
|||
|
0: e
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
athing
|
|||
|
No match
|
|||
|
fthing
|
|||
|
No match
|
|||
|
|
|||
|
/^[^ab\]cde]/
|
|||
|
fthing
|
|||
|
0: f
|
|||
|
[thing
|
|||
|
0: [
|
|||
|
\\thing
|
|||
|
0: \
|
|||
|
*** Failers
|
|||
|
0: *
|
|||
|
athing
|
|||
|
No match
|
|||
|
bthing
|
|||
|
No match
|
|||
|
]thing
|
|||
|
No match
|
|||
|
cthing
|
|||
|
No match
|
|||
|
dthing
|
|||
|
No match
|
|||
|
ething
|
|||
|
No match
|
|||
|
|
|||
|
/^[^]cde]/
|
|||
|
athing
|
|||
|
0: a
|
|||
|
fthing
|
|||
|
0: f
|
|||
|
*** Failers
|
|||
|
0: *
|
|||
|
]thing
|
|||
|
No match
|
|||
|
cthing
|
|||
|
No match
|
|||
|
dthing
|
|||
|
No match
|
|||
|
ething
|
|||
|
No match
|
|||
|
|
|||
|
/^\<5C>/
|
|||
|
<20>
|
|||
|
0: \x81
|
|||
|
|
|||
|
/^<5E>/
|
|||
|
<20>
|
|||
|
0: \xff
|
|||
|
|
|||
|
/^[0-9]+$/
|
|||
|
0
|
|||
|
0: 0
|
|||
|
1
|
|||
|
0: 1
|
|||
|
2
|
|||
|
0: 2
|
|||
|
3
|
|||
|
0: 3
|
|||
|
4
|
|||
|
0: 4
|
|||
|
5
|
|||
|
0: 5
|
|||
|
6
|
|||
|
0: 6
|
|||
|
7
|
|||
|
0: 7
|
|||
|
8
|
|||
|
0: 8
|
|||
|
9
|
|||
|
0: 9
|
|||
|
10
|
|||
|
0: 10
|
|||
|
100
|
|||
|
0: 100
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abc
|
|||
|
No match
|
|||
|
|
|||
|
/^.*nter/
|
|||
|
enter
|
|||
|
0: enter
|
|||
|
inter
|
|||
|
0: inter
|
|||
|
uponter
|
|||
|
0: uponter
|
|||
|
|
|||
|
/^xxx[0-9]+$/
|
|||
|
xxx0
|
|||
|
0: xxx0
|
|||
|
xxx1234
|
|||
|
0: xxx1234
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
xxx
|
|||
|
No match
|
|||
|
|
|||
|
/^.+[0-9][0-9][0-9]$/
|
|||
|
x123
|
|||
|
0: x123
|
|||
|
xx123
|
|||
|
0: xx123
|
|||
|
123456
|
|||
|
0: 123456
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
123
|
|||
|
No match
|
|||
|
x1234
|
|||
|
0: x1234
|
|||
|
|
|||
|
/^.+?[0-9][0-9][0-9]$/
|
|||
|
x123
|
|||
|
0: x123
|
|||
|
xx123
|
|||
|
0: xx123
|
|||
|
123456
|
|||
|
0: 123456
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
123
|
|||
|
No match
|
|||
|
x1234
|
|||
|
0: x1234
|
|||
|
|
|||
|
/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
|
|||
|
abc!pqr=apquxz.ixr.zzz.ac.uk
|
|||
|
0: abc!pqr=apquxz.ixr.zzz.ac.uk
|
|||
|
1: abc
|
|||
|
2: pqr
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
!pqr=apquxz.ixr.zzz.ac.uk
|
|||
|
No match
|
|||
|
abc!=apquxz.ixr.zzz.ac.uk
|
|||
|
No match
|
|||
|
abc!pqr=apquxz:ixr.zzz.ac.uk
|
|||
|
No match
|
|||
|
abc!pqr=apquxz.ixr.zzz.ac.ukk
|
|||
|
No match
|
|||
|
|
|||
|
/:/
|
|||
|
Well, we need a colon: somewhere
|
|||
|
0: :
|
|||
|
*** Fail if we don't
|
|||
|
No match
|
|||
|
|
|||
|
/([\da-f:]+)$/i
|
|||
|
0abc
|
|||
|
0: 0abc
|
|||
|
1: 0abc
|
|||
|
abc
|
|||
|
0: abc
|
|||
|
1: abc
|
|||
|
fed
|
|||
|
0: fed
|
|||
|
1: fed
|
|||
|
E
|
|||
|
0: E
|
|||
|
1: E
|
|||
|
::
|
|||
|
0: ::
|
|||
|
1: ::
|
|||
|
5f03:12C0::932e
|
|||
|
0: 5f03:12C0::932e
|
|||
|
1: 5f03:12C0::932e
|
|||
|
fed def
|
|||
|
0: def
|
|||
|
1: def
|
|||
|
Any old stuff
|
|||
|
0: ff
|
|||
|
1: ff
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
0zzz
|
|||
|
No match
|
|||
|
gzzz
|
|||
|
No match
|
|||
|
fed\x20
|
|||
|
No match
|
|||
|
Any old rubbish
|
|||
|
No match
|
|||
|
|
|||
|
/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
|
|||
|
.1.2.3
|
|||
|
0: .1.2.3
|
|||
|
1: 1
|
|||
|
2: 2
|
|||
|
3: 3
|
|||
|
A.12.123.0
|
|||
|
0: A.12.123.0
|
|||
|
1: 12
|
|||
|
2: 123
|
|||
|
3: 0
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
.1.2.3333
|
|||
|
No match
|
|||
|
1.2.3
|
|||
|
No match
|
|||
|
1234.2.3
|
|||
|
No match
|
|||
|
|
|||
|
/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
|
|||
|
1 IN SOA non-sp1 non-sp2(
|
|||
|
0: 1 IN SOA non-sp1 non-sp2(
|
|||
|
1: 1
|
|||
|
2: non-sp1
|
|||
|
3: non-sp2
|
|||
|
1 IN SOA non-sp1 non-sp2 (
|
|||
|
0: 1 IN SOA non-sp1 non-sp2 (
|
|||
|
1: 1
|
|||
|
2: non-sp1
|
|||
|
3: non-sp2
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
1IN SOA non-sp1 non-sp2(
|
|||
|
No match
|
|||
|
|
|||
|
/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
|
|||
|
a.
|
|||
|
0: a.
|
|||
|
Z.
|
|||
|
0: Z.
|
|||
|
2.
|
|||
|
0: 2.
|
|||
|
ab-c.pq-r.
|
|||
|
0: ab-c.pq-r.
|
|||
|
1: .pq-r
|
|||
|
sxk.zzz.ac.uk.
|
|||
|
0: sxk.zzz.ac.uk.
|
|||
|
1: .uk
|
|||
|
x-.y-.
|
|||
|
0: x-.y-.
|
|||
|
1: .y-
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
-abc.peq.
|
|||
|
No match
|
|||
|
|
|||
|
/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
|
|||
|
*.a
|
|||
|
0: *.a
|
|||
|
*.b0-a
|
|||
|
0: *.b0-a
|
|||
|
1: 0-a
|
|||
|
*.c3-b.c
|
|||
|
0: *.c3-b.c
|
|||
|
1: 3-b
|
|||
|
2: .c
|
|||
|
*.c-a.b-c
|
|||
|
0: *.c-a.b-c
|
|||
|
1: -a
|
|||
|
2: .b-c
|
|||
|
3: -c
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
*.0
|
|||
|
No match
|
|||
|
*.a-
|
|||
|
No match
|
|||
|
*.a-b.c-
|
|||
|
No match
|
|||
|
*.c-a.0-c
|
|||
|
No match
|
|||
|
|
|||
|
/^(?=ab(de))(abd)(e)/
|
|||
|
abde
|
|||
|
0: abde
|
|||
|
1: de
|
|||
|
2: abd
|
|||
|
3: e
|
|||
|
|
|||
|
/^(?!(ab)de|x)(abd)(f)/
|
|||
|
abdf
|
|||
|
0: abdf
|
|||
|
1: <unset>
|
|||
|
2: abd
|
|||
|
3: f
|
|||
|
|
|||
|
/^(?=(ab(cd)))(ab)/
|
|||
|
abcd
|
|||
|
0: ab
|
|||
|
1: abcd
|
|||
|
2: cd
|
|||
|
3: ab
|
|||
|
|
|||
|
/^[\da-f](\.[\da-f])*$/i
|
|||
|
a.b.c.d
|
|||
|
0: a.b.c.d
|
|||
|
1: .d
|
|||
|
A.B.C.D
|
|||
|
0: A.B.C.D
|
|||
|
1: .D
|
|||
|
a.b.c.1.2.3.C
|
|||
|
0: a.b.c.1.2.3.C
|
|||
|
1: .C
|
|||
|
|
|||
|
/^\".*\"\s*(;.*)?$/
|
|||
|
\"1234\"
|
|||
|
0: "1234"
|
|||
|
\"abcd\" ;
|
|||
|
0: "abcd" ;
|
|||
|
1: ;
|
|||
|
\"\" ; rhubarb
|
|||
|
0: "" ; rhubarb
|
|||
|
1: ; rhubarb
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
\"1234\" : things
|
|||
|
No match
|
|||
|
|
|||
|
/^$/
|
|||
|
\
|
|||
|
0:
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
|
|||
|
/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
|
|||
|
ab c
|
|||
|
0: ab c
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abc
|
|||
|
No match
|
|||
|
ab cde
|
|||
|
No match
|
|||
|
|
|||
|
/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
|
|||
|
ab c
|
|||
|
0: ab c
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abc
|
|||
|
No match
|
|||
|
ab cde
|
|||
|
No match
|
|||
|
|
|||
|
/^ a\ b[c ]d $/x
|
|||
|
a bcd
|
|||
|
0: a bcd
|
|||
|
a b d
|
|||
|
0: a b d
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abcd
|
|||
|
No match
|
|||
|
ab d
|
|||
|
No match
|
|||
|
|
|||
|
/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
|
|||
|
abcdefhijklm
|
|||
|
0: abcdefhijklm
|
|||
|
1: abc
|
|||
|
2: bc
|
|||
|
3: c
|
|||
|
4: def
|
|||
|
5: ef
|
|||
|
6: f
|
|||
|
7: hij
|
|||
|
8: ij
|
|||
|
9: j
|
|||
|
10: klm
|
|||
|
11: lm
|
|||
|
12: m
|
|||
|
|
|||
|
/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
|
|||
|
abcdefhijklm
|
|||
|
0: abcdefhijklm
|
|||
|
1: bc
|
|||
|
2: c
|
|||
|
3: ef
|
|||
|
4: f
|
|||
|
5: ij
|
|||
|
6: j
|
|||
|
7: lm
|
|||
|
8: m
|
|||
|
|
|||
|
/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
|
|||
|
a+ Z0+\x08\n\x1d\x12
|
|||
|
0: a+ Z0+\x08\x0a\x1d\x12
|
|||
|
|
|||
|
/^[.^$|()*+?{,}]+/
|
|||
|
.^\$(*+)|{?,?}
|
|||
|
0: .^$(*+)|{?,?}
|
|||
|
|
|||
|
/^a*\w/
|
|||
|
z
|
|||
|
0: z
|
|||
|
az
|
|||
|
0: az
|
|||
|
aaaz
|
|||
|
0: aaaz
|
|||
|
a
|
|||
|
0: a
|
|||
|
aa
|
|||
|
0: aa
|
|||
|
aaaa
|
|||
|
0: aaaa
|
|||
|
a+
|
|||
|
0: a
|
|||
|
aa+
|
|||
|
0: aa
|
|||
|
|
|||
|
/^a*?\w/
|
|||
|
z
|
|||
|
0: z
|
|||
|
az
|
|||
|
0: a
|
|||
|
aaaz
|
|||
|
0: a
|
|||
|
a
|
|||
|
0: a
|
|||
|
aa
|
|||
|
0: a
|
|||
|
aaaa
|
|||
|
0: a
|
|||
|
a+
|
|||
|
0: a
|
|||
|
aa+
|
|||
|
0: a
|
|||
|
|
|||
|
/^a+\w/
|
|||
|
az
|
|||
|
0: az
|
|||
|
aaaz
|
|||
|
0: aaaz
|
|||
|
aa
|
|||
|
0: aa
|
|||
|
aaaa
|
|||
|
0: aaaa
|
|||
|
aa+
|
|||
|
0: aa
|
|||
|
|
|||
|
/^a+?\w/
|
|||
|
az
|
|||
|
0: az
|
|||
|
aaaz
|
|||
|
0: aa
|
|||
|
aa
|
|||
|
0: aa
|
|||
|
aaaa
|
|||
|
0: aa
|
|||
|
aa+
|
|||
|
0: aa
|
|||
|
|
|||
|
/^\d{8}\w{2,}/
|
|||
|
1234567890
|
|||
|
0: 1234567890
|
|||
|
12345678ab
|
|||
|
0: 12345678ab
|
|||
|
12345678__
|
|||
|
0: 12345678__
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
1234567
|
|||
|
No match
|
|||
|
|
|||
|
/^[aeiou\d]{4,5}$/
|
|||
|
uoie
|
|||
|
0: uoie
|
|||
|
1234
|
|||
|
0: 1234
|
|||
|
12345
|
|||
|
0: 12345
|
|||
|
aaaaa
|
|||
|
0: aaaaa
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
123456
|
|||
|
No match
|
|||
|
|
|||
|
/^[aeiou\d]{4,5}?/
|
|||
|
uoie
|
|||
|
0: uoie
|
|||
|
1234
|
|||
|
0: 1234
|
|||
|
12345
|
|||
|
0: 1234
|
|||
|
aaaaa
|
|||
|
0: aaaa
|
|||
|
123456
|
|||
|
0: 1234
|
|||
|
|
|||
|
/\A(abc|def)=(\1){2,3}\Z/
|
|||
|
abc=abcabc
|
|||
|
0: abc=abcabc
|
|||
|
1: abc
|
|||
|
2: abc
|
|||
|
def=defdefdef
|
|||
|
0: def=defdefdef
|
|||
|
1: def
|
|||
|
2: def
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abc=defdef
|
|||
|
No match
|
|||
|
|
|||
|
/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
|
|||
|
abcdefghijkcda2
|
|||
|
0: abcdefghijkcda2
|
|||
|
1: a
|
|||
|
2: b
|
|||
|
3: c
|
|||
|
4: d
|
|||
|
5: e
|
|||
|
6: f
|
|||
|
7: g
|
|||
|
8: h
|
|||
|
9: i
|
|||
|
10: j
|
|||
|
11: k
|
|||
|
12: cd
|
|||
|
abcdefghijkkkkcda2
|
|||
|
0: abcdefghijkkkkcda2
|
|||
|
1: a
|
|||
|
2: b
|
|||
|
3: c
|
|||
|
4: d
|
|||
|
5: e
|
|||
|
6: f
|
|||
|
7: g
|
|||
|
8: h
|
|||
|
9: i
|
|||
|
10: j
|
|||
|
11: k
|
|||
|
12: cd
|
|||
|
|
|||
|
/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
|
|||
|
cataract cataract23
|
|||
|
0: cataract cataract23
|
|||
|
1: cataract
|
|||
|
2: aract
|
|||
|
3: ract
|
|||
|
4:
|
|||
|
5: 3
|
|||
|
catatonic catatonic23
|
|||
|
0: catatonic catatonic23
|
|||
|
1: catatonic
|
|||
|
2: atonic
|
|||
|
3: tonic
|
|||
|
4:
|
|||
|
5: 3
|
|||
|
caterpillar caterpillar23
|
|||
|
0: caterpillar caterpillar23
|
|||
|
1: caterpillar
|
|||
|
2: erpillar
|
|||
|
3: <unset>
|
|||
|
4:
|
|||
|
5: 3
|
|||
|
|
|||
|
|
|||
|
/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
|
|||
|
From abcd Mon Sep 01 12:33:02 1997
|
|||
|
0: From abcd Mon Sep 01 12:33
|
|||
|
1: abcd
|
|||
|
|
|||
|
/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
|
|||
|
From abcd Mon Sep 01 12:33:02 1997
|
|||
|
0: From abcd Mon Sep 01 12:33
|
|||
|
1: Sep
|
|||
|
From abcd Mon Sep 1 12:33:02 1997
|
|||
|
0: From abcd Mon Sep 1 12:33
|
|||
|
1: Sep
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
From abcd Sep 01 12:33:02 1997
|
|||
|
No match
|
|||
|
|
|||
|
/^12.34/s
|
|||
|
12\n34
|
|||
|
0: 12\x0a34
|
|||
|
12\r34
|
|||
|
0: 12\x0d34
|
|||
|
|
|||
|
/\w+(?=\t)/
|
|||
|
the quick brown\t fox
|
|||
|
0: brown
|
|||
|
|
|||
|
/foo(?!bar)(.*)/
|
|||
|
foobar is foolish see?
|
|||
|
0: foolish see?
|
|||
|
1: lish see?
|
|||
|
|
|||
|
/(?:(?!foo)...|^.{0,2})bar(.*)/
|
|||
|
foobar crowbar etc
|
|||
|
0: rowbar etc
|
|||
|
1: etc
|
|||
|
barrel
|
|||
|
0: barrel
|
|||
|
1: rel
|
|||
|
2barrel
|
|||
|
0: 2barrel
|
|||
|
1: rel
|
|||
|
A barrel
|
|||
|
0: A barrel
|
|||
|
1: rel
|
|||
|
|
|||
|
/^(\D*)(?=\d)(?!123)/
|
|||
|
abc456
|
|||
|
0: abc
|
|||
|
1: abc
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abc123
|
|||
|
No match
|
|||
|
|
|||
|
/^1234(?# test newlines
|
|||
|
inside)/
|
|||
|
1234
|
|||
|
0: 1234
|
|||
|
|
|||
|
/^1234 #comment in extended re
|
|||
|
/x
|
|||
|
1234
|
|||
|
0: 1234
|
|||
|
|
|||
|
/#rhubarb
|
|||
|
abcd/x
|
|||
|
abcd
|
|||
|
0: abcd
|
|||
|
|
|||
|
/^abcd#rhubarb/x
|
|||
|
abcd
|
|||
|
0: abcd
|
|||
|
|
|||
|
/^(a)\1{2,3}(.)/
|
|||
|
aaab
|
|||
|
0: aaab
|
|||
|
1: a
|
|||
|
2: b
|
|||
|
aaaab
|
|||
|
0: aaaab
|
|||
|
1: a
|
|||
|
2: b
|
|||
|
aaaaab
|
|||
|
0: aaaaa
|
|||
|
1: a
|
|||
|
2: a
|
|||
|
aaaaaab
|
|||
|
0: aaaaa
|
|||
|
1: a
|
|||
|
2: a
|
|||
|
|
|||
|
/(?!^)abc/
|
|||
|
the abc
|
|||
|
0: abc
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abc
|
|||
|
No match
|
|||
|
|
|||
|
/(?=^)abc/
|
|||
|
abc
|
|||
|
0: abc
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
the abc
|
|||
|
No match
|
|||
|
|
|||
|
/^[ab]{1,3}(ab*|b)/
|
|||
|
aabbbbb
|
|||
|
0: aabb
|
|||
|
1: b
|
|||
|
|
|||
|
/^[ab]{1,3}?(ab*|b)/
|
|||
|
aabbbbb
|
|||
|
0: aabbbbb
|
|||
|
1: abbbbb
|
|||
|
|
|||
|
/^[ab]{1,3}?(ab*?|b)/
|
|||
|
aabbbbb
|
|||
|
0: aa
|
|||
|
1: a
|
|||
|
|
|||
|
/^[ab]{1,3}(ab*?|b)/
|
|||
|
aabbbbb
|
|||
|
0: aabb
|
|||
|
1: b
|
|||
|
|
|||
|
/ (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* # optional leading comment
|
|||
|
(?: (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
" (?: # opening quote...
|
|||
|
[^\\\x80-\xff\n\015"] # Anything except backslash and quote
|
|||
|
| # or
|
|||
|
\\ [^\x80-\xff] # Escaped something (something != CR)
|
|||
|
)* " # closing quote
|
|||
|
) # initial word
|
|||
|
(?: (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* \. (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
" (?: # opening quote...
|
|||
|
[^\\\x80-\xff\n\015"] # Anything except backslash and quote
|
|||
|
| # or
|
|||
|
\\ [^\x80-\xff] # Escaped something (something != CR)
|
|||
|
)* " # closing quote
|
|||
|
) )* # further okay, if led by a period
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* @ (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
| \[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
) # initial subdomain
|
|||
|
(?: #
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* \. # if led by a period...
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
| \[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
) # ...further okay
|
|||
|
)*
|
|||
|
# address
|
|||
|
| # or
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
" (?: # opening quote...
|
|||
|
[^\\\x80-\xff\n\015"] # Anything except backslash and quote
|
|||
|
| # or
|
|||
|
\\ [^\x80-\xff] # Escaped something (something != CR)
|
|||
|
)* " # closing quote
|
|||
|
) # one word, optionally followed by....
|
|||
|
(?:
|
|||
|
[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
|
|||
|
\(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) | # comments, or...
|
|||
|
|
|||
|
" (?: # opening quote...
|
|||
|
[^\\\x80-\xff\n\015"] # Anything except backslash and quote
|
|||
|
| # or
|
|||
|
\\ [^\x80-\xff] # Escaped something (something != CR)
|
|||
|
)* " # closing quote
|
|||
|
# quoted strings
|
|||
|
)*
|
|||
|
< (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* # leading <
|
|||
|
(?: @ (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
| \[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
) # initial subdomain
|
|||
|
(?: #
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* \. # if led by a period...
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
| \[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
) # ...further okay
|
|||
|
)*
|
|||
|
|
|||
|
(?: (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* , (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* @ (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
| \[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
) # initial subdomain
|
|||
|
(?: #
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* \. # if led by a period...
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
| \[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
) # ...further okay
|
|||
|
)*
|
|||
|
)* # further okay, if led by comma
|
|||
|
: # closing colon
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* )? # optional route
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
" (?: # opening quote...
|
|||
|
[^\\\x80-\xff\n\015"] # Anything except backslash and quote
|
|||
|
| # or
|
|||
|
\\ [^\x80-\xff] # Escaped something (something != CR)
|
|||
|
)* " # closing quote
|
|||
|
) # initial word
|
|||
|
(?: (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* \. (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
" (?: # opening quote...
|
|||
|
[^\\\x80-\xff\n\015"] # Anything except backslash and quote
|
|||
|
| # or
|
|||
|
\\ [^\x80-\xff] # Escaped something (something != CR)
|
|||
|
)* " # closing quote
|
|||
|
) )* # further okay, if led by a period
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* @ (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
| \[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
) # initial subdomain
|
|||
|
(?: #
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* \. # if led by a period...
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* (?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
| \[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
) # ...further okay
|
|||
|
)*
|
|||
|
# address spec
|
|||
|
(?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* > # trailing >
|
|||
|
# name and address
|
|||
|
) (?: [\040\t] | \(
|
|||
|
(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
|
|||
|
\) )* # optional trailing comment
|
|||
|
/x
|
|||
|
Alan Other <user\@dom.ain>
|
|||
|
0: Alan Other <user@dom.ain>
|
|||
|
<user\@dom.ain>
|
|||
|
0: user@dom.ain
|
|||
|
user\@dom.ain
|
|||
|
0: user@dom.ain
|
|||
|
\"A. Other\" <user.1234\@dom.ain> (a comment)
|
|||
|
0: "A. Other" <user.1234@dom.ain> (a comment)
|
|||
|
A. Other <user.1234\@dom.ain> (a comment)
|
|||
|
0: Other <user.1234@dom.ain> (a comment)
|
|||
|
\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
|
|||
|
0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
|
|||
|
A missing angle <user\@some.where
|
|||
|
0: user@some.where
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
The quick brown fox
|
|||
|
No match
|
|||
|
|
|||
|
/[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional leading comment
|
|||
|
(?:
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
# Atom
|
|||
|
| # or
|
|||
|
" # "
|
|||
|
[^\\\x80-\xff\n\015"] * # normal
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
|
|||
|
" # "
|
|||
|
# Quoted string
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
\.
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
# Atom
|
|||
|
| # or
|
|||
|
" # "
|
|||
|
[^\\\x80-\xff\n\015"] * # normal
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
|
|||
|
" # "
|
|||
|
# Quoted string
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# additional words
|
|||
|
)*
|
|||
|
@
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
\[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional trailing comments
|
|||
|
(?:
|
|||
|
\.
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
\[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional trailing comments
|
|||
|
)*
|
|||
|
# address
|
|||
|
| # or
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
# Atom
|
|||
|
| # or
|
|||
|
" # "
|
|||
|
[^\\\x80-\xff\n\015"] * # normal
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
|
|||
|
" # "
|
|||
|
# Quoted string
|
|||
|
)
|
|||
|
# leading word
|
|||
|
[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
|
|||
|
(?:
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
|
|
|||
|
" # "
|
|||
|
[^\\\x80-\xff\n\015"] * # normal
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
|
|||
|
" # "
|
|||
|
) # "special" comment or quoted string
|
|||
|
[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
|
|||
|
)*
|
|||
|
<
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# <
|
|||
|
(?:
|
|||
|
@
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
\[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional trailing comments
|
|||
|
(?:
|
|||
|
\.
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
\[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional trailing comments
|
|||
|
)*
|
|||
|
(?: ,
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
@
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
\[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional trailing comments
|
|||
|
(?:
|
|||
|
\.
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
\[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional trailing comments
|
|||
|
)*
|
|||
|
)* # additional domains
|
|||
|
:
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional trailing comments
|
|||
|
)? # optional route
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
# Atom
|
|||
|
| # or
|
|||
|
" # "
|
|||
|
[^\\\x80-\xff\n\015"] * # normal
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
|
|||
|
" # "
|
|||
|
# Quoted string
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
\.
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
# Atom
|
|||
|
| # or
|
|||
|
" # "
|
|||
|
[^\\\x80-\xff\n\015"] * # normal
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
|
|||
|
" # "
|
|||
|
# Quoted string
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# additional words
|
|||
|
)*
|
|||
|
@
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
\[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional trailing comments
|
|||
|
(?:
|
|||
|
\.
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
(?:
|
|||
|
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
|
|||
|
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
|||
|
|
|
|||
|
\[ # [
|
|||
|
(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
|
|||
|
\] # ]
|
|||
|
)
|
|||
|
[\040\t]* # Nab whitespace.
|
|||
|
(?:
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: # (
|
|||
|
(?: \\ [^\x80-\xff] |
|
|||
|
\( # (
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
|
|||
|
\) # )
|
|||
|
) # special
|
|||
|
[^\\\x80-\xff\n\015()] * # normal*
|
|||
|
)* # )*
|
|||
|
\) # )
|
|||
|
[\040\t]* )* # If comment found, allow more spaces.
|
|||
|
# optional trailing comments
|
|||
|
)*
|
|||
|
# address spec
|
|||
|
> # >
|
|||
|
# name and address
|
|||
|
)
|
|||
|
/x
|
|||
|
Alan Other <user\@dom.ain>
|
|||
|
0: Alan Other <user@dom.ain>
|
|||
|
<user\@dom.ain>
|
|||
|
0: user@dom.ain
|
|||
|
user\@dom.ain
|
|||
|
0: user@dom.ain
|
|||
|
\"A. Other\" <user.1234\@dom.ain> (a comment)
|
|||
|
0: "A. Other" <user.1234@dom.ain>
|
|||
|
A. Other <user.1234\@dom.ain> (a comment)
|
|||
|
0: Other <user.1234@dom.ain>
|
|||
|
\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
|
|||
|
0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
|
|||
|
A missing angle <user\@some.where
|
|||
|
0: user@some.where
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
The quick brown fox
|
|||
|
No match
|
|||
|
|
|||
|
/abc\0def\00pqr\000xyz\0000AB/
|
|||
|
abc\0def\00pqr\000xyz\0000AB
|
|||
|
0: abc\x00def\x00pqr\x00xyz\x000AB
|
|||
|
abc456 abc\0def\00pqr\000xyz\0000ABCDE
|
|||
|
0: abc\x00def\x00pqr\x00xyz\x000AB
|
|||
|
|
|||
|
/abc\x0def\x00pqr\x000xyz\x0000AB/
|
|||
|
abc\x0def\x00pqr\x000xyz\x0000AB
|
|||
|
0: abc\x0def\x00pqr\x000xyz\x0000AB
|
|||
|
abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
|
|||
|
0: abc\x0def\x00pqr\x000xyz\x0000AB
|
|||
|
|
|||
|
/^[\000-\037]/
|
|||
|
\0A
|
|||
|
0: \x00
|
|||
|
\01B
|
|||
|
0: \x01
|
|||
|
\037C
|
|||
|
0: \x1f
|
|||
|
|
|||
|
/\0*/
|
|||
|
\0\0\0\0
|
|||
|
0: \x00\x00\x00\x00
|
|||
|
|
|||
|
/A\x0{2,3}Z/
|
|||
|
The A\x0\x0Z
|
|||
|
0: A\x00\x00Z
|
|||
|
An A\0\x0\0Z
|
|||
|
0: A\x00\x00\x00Z
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
A\0Z
|
|||
|
No match
|
|||
|
A\0\x0\0\x0Z
|
|||
|
No match
|
|||
|
|
|||
|
/^(cow|)\1(bell)/
|
|||
|
cowcowbell
|
|||
|
0: cowcowbell
|
|||
|
1: cow
|
|||
|
2: bell
|
|||
|
bell
|
|||
|
0: bell
|
|||
|
1:
|
|||
|
2: bell
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
cowbell
|
|||
|
No match
|
|||
|
|
|||
|
/^\s/
|
|||
|
\040abc
|
|||
|
0:
|
|||
|
\x0cabc
|
|||
|
0: \x0c
|
|||
|
\nabc
|
|||
|
0: \x0a
|
|||
|
\rabc
|
|||
|
0: \x0d
|
|||
|
\tabc
|
|||
|
0: \x09
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abc
|
|||
|
No match
|
|||
|
|
|||
|
/^a b
|
|||
|
|
|||
|
c/x
|
|||
|
abc
|
|||
|
0: abc
|
|||
|
|
|||
|
/^(a|)\1*b/
|
|||
|
ab
|
|||
|
0: ab
|
|||
|
1: a
|
|||
|
aaaab
|
|||
|
0: aaaab
|
|||
|
1: a
|
|||
|
b
|
|||
|
0: b
|
|||
|
1:
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
acb
|
|||
|
No match
|
|||
|
|
|||
|
/^(a|)\1+b/
|
|||
|
aab
|
|||
|
0: aab
|
|||
|
1: a
|
|||
|
aaaab
|
|||
|
0: aaaab
|
|||
|
1: a
|
|||
|
b
|
|||
|
0: b
|
|||
|
1:
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
ab
|
|||
|
No match
|
|||
|
|
|||
|
/^(a|)\1?b/
|
|||
|
ab
|
|||
|
0: ab
|
|||
|
1: a
|
|||
|
aab
|
|||
|
0: aab
|
|||
|
1: a
|
|||
|
b
|
|||
|
0: b
|
|||
|
1:
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
acb
|
|||
|
No match
|
|||
|
|
|||
|
/^(a|)\1{2}b/
|
|||
|
aaab
|
|||
|
0: aaab
|
|||
|
1: a
|
|||
|
b
|
|||
|
0: b
|
|||
|
1:
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
ab
|
|||
|
No match
|
|||
|
aab
|
|||
|
No match
|
|||
|
aaaab
|
|||
|
No match
|
|||
|
|
|||
|
/^(a|)\1{2,3}b/
|
|||
|
aaab
|
|||
|
0: aaab
|
|||
|
1: a
|
|||
|
aaaab
|
|||
|
0: aaaab
|
|||
|
1: a
|
|||
|
b
|
|||
|
0: b
|
|||
|
1:
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
ab
|
|||
|
No match
|
|||
|
aab
|
|||
|
No match
|
|||
|
aaaaab
|
|||
|
No match
|
|||
|
|
|||
|
/ab{1,3}bc/
|
|||
|
abbbbc
|
|||
|
0: abbbbc
|
|||
|
abbbc
|
|||
|
0: abbbc
|
|||
|
abbc
|
|||
|
0: abbc
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abc
|
|||
|
No match
|
|||
|
abbbbbc
|
|||
|
No match
|
|||
|
|
|||
|
/([^.]*)\.([^:]*):[T ]+(.*)/
|
|||
|
track1.title:TBlah blah blah
|
|||
|
0: track1.title:TBlah blah blah
|
|||
|
1: track1
|
|||
|
2: title
|
|||
|
3: Blah blah blah
|
|||
|
|
|||
|
/([^.]*)\.([^:]*):[T ]+(.*)/i
|
|||
|
track1.title:TBlah blah blah
|
|||
|
0: track1.title:TBlah blah blah
|
|||
|
1: track1
|
|||
|
2: title
|
|||
|
3: Blah blah blah
|
|||
|
|
|||
|
/([^.]*)\.([^:]*):[t ]+(.*)/i
|
|||
|
track1.title:TBlah blah blah
|
|||
|
0: track1.title:TBlah blah blah
|
|||
|
1: track1
|
|||
|
2: title
|
|||
|
3: Blah blah blah
|
|||
|
|
|||
|
/^[W-c]+$/
|
|||
|
WXY_^abc
|
|||
|
0: WXY_^abc
|
|||
|
***Failers
|
|||
|
No match
|
|||
|
wxy
|
|||
|
No match
|
|||
|
|
|||
|
/^[W-c]+$/i
|
|||
|
WXY_^abc
|
|||
|
0: WXY_^abc
|
|||
|
wxy_^ABC
|
|||
|
0: wxy_^ABC
|
|||
|
|
|||
|
/^[\x3f-\x5F]+$/i
|
|||
|
WXY_^abc
|
|||
|
0: WXY_^abc
|
|||
|
wxy_^ABC
|
|||
|
0: wxy_^ABC
|
|||
|
|
|||
|
/^abc$/m
|
|||
|
abc
|
|||
|
0: abc
|
|||
|
qqq\nabc
|
|||
|
0: abc
|
|||
|
abc\nzzz
|
|||
|
0: abc
|
|||
|
qqq\nabc\nzzz
|
|||
|
0: abc
|
|||
|
|
|||
|
/^abc$/
|
|||
|
abc
|
|||
|
0: abc
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
qqq\nabc
|
|||
|
No match
|
|||
|
abc\nzzz
|
|||
|
No match
|
|||
|
qqq\nabc\nzzz
|
|||
|
No match
|
|||
|
|
|||
|
/\Aabc\Z/m
|
|||
|
abc
|
|||
|
0: abc
|
|||
|
abc\n
|
|||
|
0: abc
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
qqq\nabc
|
|||
|
No match
|
|||
|
abc\nzzz
|
|||
|
No match
|
|||
|
qqq\nabc\nzzz
|
|||
|
No match
|
|||
|
|
|||
|
/\A(.)*\Z/s
|
|||
|
abc\ndef
|
|||
|
0: abc\x0adef
|
|||
|
1: f
|
|||
|
|
|||
|
/\A(.)*\Z/m
|
|||
|
*** Failers
|
|||
|
0: *** Failers
|
|||
|
1: s
|
|||
|
abc\ndef
|
|||
|
No match
|
|||
|
|
|||
|
/(?:b)|(?::+)/
|
|||
|
b::c
|
|||
|
0: b
|
|||
|
c::b
|
|||
|
0: ::
|
|||
|
|
|||
|
/[-az]+/
|
|||
|
az-
|
|||
|
0: az-
|
|||
|
*** Failers
|
|||
|
0: a
|
|||
|
b
|
|||
|
No match
|
|||
|
|
|||
|
/[az-]+/
|
|||
|
za-
|
|||
|
0: za-
|
|||
|
*** Failers
|
|||
|
0: a
|
|||
|
b
|
|||
|
No match
|
|||
|
|
|||
|
/[a\-z]+/
|
|||
|
a-z
|
|||
|
0: a-z
|
|||
|
*** Failers
|
|||
|
0: a
|
|||
|
b
|
|||
|
No match
|
|||
|
|
|||
|
/[a-z]+/
|
|||
|
abcdxyz
|
|||
|
0: abcdxyz
|
|||
|
|
|||
|
/[\d-]+/
|
|||
|
12-34
|
|||
|
0: 12-34
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
aaa
|
|||
|
No match
|
|||
|
|
|||
|
/[\d-z]+/
|
|||
|
12-34z
|
|||
|
0: 12-34z
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
aaa
|
|||
|
No match
|
|||
|
|
|||
|
/\x5c/
|
|||
|
\\
|
|||
|
0: \
|
|||
|
|
|||
|
/\x20Z/
|
|||
|
the Zoo
|
|||
|
0: Z
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
Zulu
|
|||
|
No match
|
|||
|
|
|||
|
/(abc)\1/i
|
|||
|
abcabc
|
|||
|
0: abcabc
|
|||
|
1: abc
|
|||
|
ABCabc
|
|||
|
0: ABCabc
|
|||
|
1: ABC
|
|||
|
abcABC
|
|||
|
0: abcABC
|
|||
|
1: abc
|
|||
|
|
|||
|
/(main(O)?)+/
|
|||
|
mainmain
|
|||
|
0: mainmain
|
|||
|
1: main
|
|||
|
mainOmain
|
|||
|
0: mainOmain
|
|||
|
1: main
|
|||
|
2: O
|
|||
|
|
|||
|
/ab{3cd/
|
|||
|
ab{3cd
|
|||
|
0: ab{3cd
|
|||
|
|
|||
|
/ab{3,cd/
|
|||
|
ab{3,cd
|
|||
|
0: ab{3,cd
|
|||
|
|
|||
|
/ab{3,4a}cd/
|
|||
|
ab{3,4a}cd
|
|||
|
0: ab{3,4a}cd
|
|||
|
|
|||
|
/{4,5a}bc/
|
|||
|
{4,5a}bc
|
|||
|
0: {4,5a}bc
|
|||
|
|
|||
|
/^a.b/
|
|||
|
a\rb
|
|||
|
0: a\x0db
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
a\nb
|
|||
|
No match
|
|||
|
|
|||
|
/abc$/
|
|||
|
abc
|
|||
|
0: abc
|
|||
|
abc\n
|
|||
|
0: abc
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abc\ndef
|
|||
|
No match
|
|||
|
|
|||
|
/(abc)\123/
|
|||
|
abc\x53
|
|||
|
0: abcS
|
|||
|
1: abc
|
|||
|
|
|||
|
/(abc)\223/
|
|||
|
abc\x93
|
|||
|
0: abc\x93
|
|||
|
1: abc
|
|||
|
|
|||
|
/(abc)\323/
|
|||
|
abc\xd3
|
|||
|
0: abc\xd3
|
|||
|
1: abc
|
|||
|
|
|||
|
/(abc)\500/
|
|||
|
abc\x40
|
|||
|
0: abc@
|
|||
|
1: abc
|
|||
|
abc\100
|
|||
|
0: abc@
|
|||
|
1: abc
|
|||
|
|
|||
|
/(abc)\5000/
|
|||
|
abc\x400
|
|||
|
0: abc@0
|
|||
|
1: abc
|
|||
|
abc\x40\x30
|
|||
|
0: abc@0
|
|||
|
1: abc
|
|||
|
abc\1000
|
|||
|
0: abc@0
|
|||
|
1: abc
|
|||
|
abc\100\x30
|
|||
|
0: abc@0
|
|||
|
1: abc
|
|||
|
abc\100\060
|
|||
|
0: abc@0
|
|||
|
1: abc
|
|||
|
abc\100\60
|
|||
|
0: abc@0
|
|||
|
1: abc
|
|||
|
|
|||
|
/abc\81/
|
|||
|
abc\081
|
|||
|
0: abc\x0081
|
|||
|
abc\0\x38\x31
|
|||
|
0: abc\x0081
|
|||
|
|
|||
|
/abc\91/
|
|||
|
abc\091
|
|||
|
0: abc\x0091
|
|||
|
abc\0\x39\x31
|
|||
|
0: abc\x0091
|
|||
|
|
|||
|
/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
|
|||
|
abcdefghijkllS
|
|||
|
0: abcdefghijkllS
|
|||
|
1: a
|
|||
|
2: b
|
|||
|
3: c
|
|||
|
4: d
|
|||
|
5: e
|
|||
|
6: f
|
|||
|
7: g
|
|||
|
8: h
|
|||
|
9: i
|
|||
|
10: j
|
|||
|
11: k
|
|||
|
12: l
|
|||
|
|
|||
|
/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
|
|||
|
abcdefghijk\12S
|
|||
|
0: abcdefghijk\x0aS
|
|||
|
1: a
|
|||
|
2: b
|
|||
|
3: c
|
|||
|
4: d
|
|||
|
5: e
|
|||
|
6: f
|
|||
|
7: g
|
|||
|
8: h
|
|||
|
9: i
|
|||
|
10: j
|
|||
|
11: k
|
|||
|
|
|||
|
/ab\gdef/
|
|||
|
abgdef
|
|||
|
0: abgdef
|
|||
|
|
|||
|
/a{0}bc/
|
|||
|
bc
|
|||
|
0: bc
|
|||
|
|
|||
|
/(a|(bc)){0,0}?xyz/
|
|||
|
xyz
|
|||
|
0: xyz
|
|||
|
|
|||
|
/abc[\10]de/
|
|||
|
abc\010de
|
|||
|
0: abc\x08de
|
|||
|
|
|||
|
/abc[\1]de/
|
|||
|
abc\1de
|
|||
|
0: abc\x01de
|
|||
|
|
|||
|
/(abc)[\1]de/
|
|||
|
abc\1de
|
|||
|
0: abc\x01de
|
|||
|
1: abc
|
|||
|
|
|||
|
/a.b(?s)/
|
|||
|
a\nb
|
|||
|
0: a\x0ab
|
|||
|
|
|||
|
/^([^a])([^\b])([^c]*)([^d]{3,4})/
|
|||
|
baNOTccccd
|
|||
|
0: baNOTcccc
|
|||
|
1: b
|
|||
|
2: a
|
|||
|
3: NOT
|
|||
|
4: cccc
|
|||
|
baNOTcccd
|
|||
|
0: baNOTccc
|
|||
|
1: b
|
|||
|
2: a
|
|||
|
3: NOT
|
|||
|
4: ccc
|
|||
|
baNOTccd
|
|||
|
0: baNOTcc
|
|||
|
1: b
|
|||
|
2: a
|
|||
|
3: NO
|
|||
|
4: Tcc
|
|||
|
bacccd
|
|||
|
0: baccc
|
|||
|
1: b
|
|||
|
2: a
|
|||
|
3:
|
|||
|
4: ccc
|
|||
|
*** Failers
|
|||
|
0: *** Failers
|
|||
|
1: *
|
|||
|
2: *
|
|||
|
3: * Fail
|
|||
|
4: ers
|
|||
|
anything
|
|||
|
No match
|
|||
|
b\bc
|
|||
|
No match
|
|||
|
baccd
|
|||
|
No match
|
|||
|
|
|||
|
/[^a]/
|
|||
|
Abc
|
|||
|
0: A
|
|||
|
|
|||
|
/[^a]/i
|
|||
|
Abc
|
|||
|
0: b
|
|||
|
|
|||
|
/[^a]+/
|
|||
|
AAAaAbc
|
|||
|
0: AAA
|
|||
|
|
|||
|
/[^a]+/i
|
|||
|
AAAaAbc
|
|||
|
0: bc
|
|||
|
|
|||
|
/[^a]+/
|
|||
|
bbb\nccc
|
|||
|
0: bbb\x0accc
|
|||
|
|
|||
|
/[^k]$/
|
|||
|
abc
|
|||
|
0: c
|
|||
|
*** Failers
|
|||
|
0: s
|
|||
|
abk
|
|||
|
No match
|
|||
|
|
|||
|
/[^k]{2,3}$/
|
|||
|
abc
|
|||
|
0: abc
|
|||
|
kbc
|
|||
|
0: bc
|
|||
|
kabc
|
|||
|
0: abc
|
|||
|
*** Failers
|
|||
|
0: ers
|
|||
|
abk
|
|||
|
No match
|
|||
|
akb
|
|||
|
No match
|
|||
|
akk
|
|||
|
No match
|
|||
|
|
|||
|
/^\d{8,}\@.+[^k]$/
|
|||
|
12345678\@a.b.c.d
|
|||
|
0: 12345678@a.b.c.d
|
|||
|
123456789\@x.y.z
|
|||
|
0: 123456789@x.y.z
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
12345678\@x.y.uk
|
|||
|
No match
|
|||
|
1234567\@a.b.c.d
|
|||
|
No match
|
|||
|
|
|||
|
/(a)\1{8,}/
|
|||
|
aaaaaaaaa
|
|||
|
0: aaaaaaaaa
|
|||
|
1: a
|
|||
|
aaaaaaaaaa
|
|||
|
0: aaaaaaaaaa
|
|||
|
1: a
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
aaaaaaa
|
|||
|
No match
|
|||
|
|
|||
|
/[^a]/
|
|||
|
aaaabcd
|
|||
|
0: b
|
|||
|
aaAabcd
|
|||
|
0: A
|
|||
|
|
|||
|
/[^a]/i
|
|||
|
aaaabcd
|
|||
|
0: b
|
|||
|
aaAabcd
|
|||
|
0: b
|
|||
|
|
|||
|
/[^az]/
|
|||
|
aaaabcd
|
|||
|
0: b
|
|||
|
aaAabcd
|
|||
|
0: A
|
|||
|
|
|||
|
/[^az]/i
|
|||
|
aaaabcd
|
|||
|
0: b
|
|||
|
aaAabcd
|
|||
|
0: b
|
|||
|
|
|||
|
/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
|
|||
|
\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
|
|||
|
0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
|
|||
|
|
|||
|
/P[^*]TAIRE[^*]{1,6}?LL/
|
|||
|
xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
|
|||
|
0: PSTAIREISLL
|
|||
|
|
|||
|
/P[^*]TAIRE[^*]{1,}?LL/
|
|||
|
xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
|
|||
|
0: PSTAIREISLL
|
|||
|
|
|||
|
/(\.\d\d[1-9]?)\d+/
|
|||
|
1.230003938
|
|||
|
0: .230003938
|
|||
|
1: .23
|
|||
|
1.875000282
|
|||
|
0: .875000282
|
|||
|
1: .875
|
|||
|
1.235
|
|||
|
0: .235
|
|||
|
1: .23
|
|||
|
|
|||
|
/(\.\d\d((?=0)|\d(?=\d)))/
|
|||
|
1.230003938
|
|||
|
0: .23
|
|||
|
1: .23
|
|||
|
2:
|
|||
|
1.875000282
|
|||
|
0: .875
|
|||
|
1: .875
|
|||
|
2: 5
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
1.235
|
|||
|
No match
|
|||
|
|
|||
|
/a(?)b/
|
|||
|
ab
|
|||
|
0: ab
|
|||
|
|
|||
|
/\b(foo)\s+(\w+)/i
|
|||
|
Food is on the foo table
|
|||
|
0: foo table
|
|||
|
1: foo
|
|||
|
2: table
|
|||
|
|
|||
|
/foo(.*)bar/
|
|||
|
The food is under the bar in the barn.
|
|||
|
0: food is under the bar in the bar
|
|||
|
1: d is under the bar in the
|
|||
|
|
|||
|
/foo(.*?)bar/
|
|||
|
The food is under the bar in the barn.
|
|||
|
0: food is under the bar
|
|||
|
1: d is under the
|
|||
|
|
|||
|
/(.*)(\d*)/
|
|||
|
I have 2 numbers: 53147
|
|||
|
0: I have 2 numbers: 53147
|
|||
|
1: I have 2 numbers: 53147
|
|||
|
2:
|
|||
|
|
|||
|
/(.*)(\d+)/
|
|||
|
I have 2 numbers: 53147
|
|||
|
0: I have 2 numbers: 53147
|
|||
|
1: I have 2 numbers: 5314
|
|||
|
2: 7
|
|||
|
|
|||
|
/(.*?)(\d*)/
|
|||
|
I have 2 numbers: 53147
|
|||
|
0:
|
|||
|
1:
|
|||
|
2:
|
|||
|
|
|||
|
/(.*?)(\d+)/
|
|||
|
I have 2 numbers: 53147
|
|||
|
0: I have 2
|
|||
|
1: I have
|
|||
|
2: 2
|
|||
|
|
|||
|
/(.*)(\d+)$/
|
|||
|
I have 2 numbers: 53147
|
|||
|
0: I have 2 numbers: 53147
|
|||
|
1: I have 2 numbers: 5314
|
|||
|
2: 7
|
|||
|
|
|||
|
/(.*?)(\d+)$/
|
|||
|
I have 2 numbers: 53147
|
|||
|
0: I have 2 numbers: 53147
|
|||
|
1: I have 2 numbers:
|
|||
|
2: 53147
|
|||
|
|
|||
|
/(.*)\b(\d+)$/
|
|||
|
I have 2 numbers: 53147
|
|||
|
0: I have 2 numbers: 53147
|
|||
|
1: I have 2 numbers:
|
|||
|
2: 53147
|
|||
|
|
|||
|
/(.*\D)(\d+)$/
|
|||
|
I have 2 numbers: 53147
|
|||
|
0: I have 2 numbers: 53147
|
|||
|
1: I have 2 numbers:
|
|||
|
2: 53147
|
|||
|
|
|||
|
/^\D*(?!123)/
|
|||
|
ABC123
|
|||
|
0: AB
|
|||
|
|
|||
|
/^(\D*)(?=\d)(?!123)/
|
|||
|
ABC445
|
|||
|
0: ABC
|
|||
|
1: ABC
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
ABC123
|
|||
|
No match
|
|||
|
|
|||
|
/^[W-]46]/
|
|||
|
W46]789
|
|||
|
0: W46]
|
|||
|
-46]789
|
|||
|
0: -46]
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
Wall
|
|||
|
No match
|
|||
|
Zebra
|
|||
|
No match
|
|||
|
42
|
|||
|
No match
|
|||
|
[abcd]
|
|||
|
No match
|
|||
|
]abcd[
|
|||
|
No match
|
|||
|
|
|||
|
/^[W-\]46]/
|
|||
|
W46]789
|
|||
|
0: W
|
|||
|
Wall
|
|||
|
0: W
|
|||
|
Zebra
|
|||
|
0: Z
|
|||
|
Xylophone
|
|||
|
0: X
|
|||
|
42
|
|||
|
0: 4
|
|||
|
[abcd]
|
|||
|
0: [
|
|||
|
]abcd[
|
|||
|
0: ]
|
|||
|
\\backslash
|
|||
|
0: \
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
-46]789
|
|||
|
No match
|
|||
|
well
|
|||
|
No match
|
|||
|
|
|||
|
/\d\d\/\d\d\/\d\d\d\d/
|
|||
|
01/01/2000
|
|||
|
0: 01/01/2000
|
|||
|
|
|||
|
/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
|
|||
|
word cat dog elephant mussel cow horse canary baboon snake shark otherword
|
|||
|
0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
|
|||
|
word cat dog elephant mussel cow horse canary baboon snake shark
|
|||
|
No match
|
|||
|
|
|||
|
/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
|
|||
|
word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
|
|||
|
No match
|
|||
|
|
|||
|
/^(a){0,0}/
|
|||
|
bcd
|
|||
|
0:
|
|||
|
abc
|
|||
|
0:
|
|||
|
aab
|
|||
|
0:
|
|||
|
|
|||
|
/^(a){0,1}/
|
|||
|
bcd
|
|||
|
0:
|
|||
|
abc
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
aab
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
|
|||
|
/^(a){0,2}/
|
|||
|
bcd
|
|||
|
0:
|
|||
|
abc
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
aab
|
|||
|
0: aa
|
|||
|
1: a
|
|||
|
|
|||
|
/^(a){0,3}/
|
|||
|
bcd
|
|||
|
0:
|
|||
|
abc
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
aab
|
|||
|
0: aa
|
|||
|
1: a
|
|||
|
aaa
|
|||
|
0: aaa
|
|||
|
1: a
|
|||
|
|
|||
|
/^(a){0,}/
|
|||
|
bcd
|
|||
|
0:
|
|||
|
abc
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
aab
|
|||
|
0: aa
|
|||
|
1: a
|
|||
|
aaa
|
|||
|
0: aaa
|
|||
|
1: a
|
|||
|
aaaaaaaa
|
|||
|
0: aaaaaaaa
|
|||
|
1: a
|
|||
|
|
|||
|
/^(a){1,1}/
|
|||
|
bcd
|
|||
|
No match
|
|||
|
abc
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
aab
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
|
|||
|
/^(a){1,2}/
|
|||
|
bcd
|
|||
|
No match
|
|||
|
abc
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
aab
|
|||
|
0: aa
|
|||
|
1: a
|
|||
|
|
|||
|
/^(a){1,3}/
|
|||
|
bcd
|
|||
|
No match
|
|||
|
abc
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
aab
|
|||
|
0: aa
|
|||
|
1: a
|
|||
|
aaa
|
|||
|
0: aaa
|
|||
|
1: a
|
|||
|
|
|||
|
/^(a){1,}/
|
|||
|
bcd
|
|||
|
No match
|
|||
|
abc
|
|||
|
0: a
|
|||
|
1: a
|
|||
|
aab
|
|||
|
0: aa
|
|||
|
1: a
|
|||
|
aaa
|
|||
|
0: aaa
|
|||
|
1: a
|
|||
|
aaaaaaaa
|
|||
|
0: aaaaaaaa
|
|||
|
1: a
|
|||
|
|
|||
|
/.*\.gif/
|
|||
|
borfle\nbib.gif\nno
|
|||
|
0: bib.gif
|
|||
|
|
|||
|
/.{0,}\.gif/
|
|||
|
borfle\nbib.gif\nno
|
|||
|
0: bib.gif
|
|||
|
|
|||
|
/.*\.gif/m
|
|||
|
borfle\nbib.gif\nno
|
|||
|
0: bib.gif
|
|||
|
|
|||
|
/.*\.gif/s
|
|||
|
borfle\nbib.gif\nno
|
|||
|
0: borfle\x0abib.gif
|
|||
|
|
|||
|
/.*\.gif/ms
|
|||
|
borfle\nbib.gif\nno
|
|||
|
0: borfle\x0abib.gif
|
|||
|
|
|||
|
/.*$/
|
|||
|
borfle\nbib.gif\nno
|
|||
|
0: no
|
|||
|
|
|||
|
/.*$/m
|
|||
|
borfle\nbib.gif\nno
|
|||
|
0: borfle
|
|||
|
|
|||
|
/.*$/s
|
|||
|
borfle\nbib.gif\nno
|
|||
|
0: borfle\x0abib.gif\x0ano
|
|||
|
|
|||
|
/.*$/ms
|
|||
|
borfle\nbib.gif\nno
|
|||
|
0: borfle\x0abib.gif\x0ano
|
|||
|
|
|||
|
/.*$/
|
|||
|
borfle\nbib.gif\nno\n
|
|||
|
0: no
|
|||
|
|
|||
|
/.*$/m
|
|||
|
borfle\nbib.gif\nno\n
|
|||
|
0: borfle
|
|||
|
|
|||
|
/.*$/s
|
|||
|
borfle\nbib.gif\nno\n
|
|||
|
0: borfle\x0abib.gif\x0ano\x0a
|
|||
|
|
|||
|
/.*$/ms
|
|||
|
borfle\nbib.gif\nno\n
|
|||
|
0: borfle\x0abib.gif\x0ano\x0a
|
|||
|
|
|||
|
/(.*X|^B)/
|
|||
|
abcde\n1234Xyz
|
|||
|
0: 1234X
|
|||
|
1: 1234X
|
|||
|
BarFoo
|
|||
|
0: B
|
|||
|
1: B
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abcde\nBar
|
|||
|
No match
|
|||
|
|
|||
|
/(.*X|^B)/m
|
|||
|
abcde\n1234Xyz
|
|||
|
0: 1234X
|
|||
|
1: 1234X
|
|||
|
BarFoo
|
|||
|
0: B
|
|||
|
1: B
|
|||
|
abcde\nBar
|
|||
|
0: B
|
|||
|
1: B
|
|||
|
|
|||
|
/(.*X|^B)/s
|
|||
|
abcde\n1234Xyz
|
|||
|
0: abcde\x0a1234X
|
|||
|
1: abcde\x0a1234X
|
|||
|
BarFoo
|
|||
|
0: B
|
|||
|
1: B
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abcde\nBar
|
|||
|
No match
|
|||
|
|
|||
|
/(.*X|^B)/ms
|
|||
|
abcde\n1234Xyz
|
|||
|
0: abcde\x0a1234X
|
|||
|
1: abcde\x0a1234X
|
|||
|
BarFoo
|
|||
|
0: B
|
|||
|
1: B
|
|||
|
abcde\nBar
|
|||
|
0: B
|
|||
|
1: B
|
|||
|
|
|||
|
/(?s)(.*X|^B)/
|
|||
|
abcde\n1234Xyz
|
|||
|
0: abcde\x0a1234X
|
|||
|
1: abcde\x0a1234X
|
|||
|
BarFoo
|
|||
|
0: B
|
|||
|
1: B
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abcde\nBar
|
|||
|
No match
|
|||
|
|
|||
|
/(?s:.*X|^B)/
|
|||
|
abcde\n1234Xyz
|
|||
|
0: abcde\x0a1234X
|
|||
|
BarFoo
|
|||
|
0: B
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abcde\nBar
|
|||
|
No match
|
|||
|
|
|||
|
/^.*B/
|
|||
|
**** Failers
|
|||
|
No match
|
|||
|
abc\nB
|
|||
|
No match
|
|||
|
|
|||
|
/(?s)^.*B/
|
|||
|
abc\nB
|
|||
|
0: abc\x0aB
|
|||
|
|
|||
|
/(?m)^.*B/
|
|||
|
abc\nB
|
|||
|
0: B
|
|||
|
|
|||
|
/(?ms)^.*B/
|
|||
|
abc\nB
|
|||
|
0: abc\x0aB
|
|||
|
|
|||
|
/(?ms)^B/
|
|||
|
abc\nB
|
|||
|
0: B
|
|||
|
|
|||
|
/(?s)B$/
|
|||
|
B\n
|
|||
|
0: B
|
|||
|
|
|||
|
/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
|
|||
|
123456654321
|
|||
|
0: 123456654321
|
|||
|
|
|||
|
/^\d\d\d\d\d\d\d\d\d\d\d\d/
|
|||
|
123456654321
|
|||
|
0: 123456654321
|
|||
|
|
|||
|
/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
|
|||
|
123456654321
|
|||
|
0: 123456654321
|
|||
|
|
|||
|
/^[abc]{12}/
|
|||
|
abcabcabcabc
|
|||
|
0: abcabcabcabc
|
|||
|
|
|||
|
/^[a-c]{12}/
|
|||
|
abcabcabcabc
|
|||
|
0: abcabcabcabc
|
|||
|
|
|||
|
/^(a|b|c){12}/
|
|||
|
abcabcabcabc
|
|||
|
0: abcabcabcabc
|
|||
|
1: c
|
|||
|
|
|||
|
/^[abcdefghijklmnopqrstuvwxy0123456789]/
|
|||
|
n
|
|||
|
0: n
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
z
|
|||
|
No match
|
|||
|
|
|||
|
/abcde{0,0}/
|
|||
|
abcd
|
|||
|
0: abcd
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abce
|
|||
|
No match
|
|||
|
|
|||
|
/ab[cd]{0,0}e/
|
|||
|
abe
|
|||
|
0: abe
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abcde
|
|||
|
No match
|
|||
|
|
|||
|
/ab(c){0,0}d/
|
|||
|
abd
|
|||
|
0: abd
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
abcd
|
|||
|
No match
|
|||
|
|
|||
|
/a(b*)/
|
|||
|
a
|
|||
|
0: a
|
|||
|
1:
|
|||
|
ab
|
|||
|
0: ab
|
|||
|
1: b
|
|||
|
abbbb
|
|||
|
0: abbbb
|
|||
|
1: bbbb
|
|||
|
*** Failers
|
|||
|
0: a
|
|||
|
1:
|
|||
|
bbbbb
|
|||
|
No match
|
|||
|
|
|||
|
/ab\d{0}e/
|
|||
|
abe
|
|||
|
0: abe
|
|||
|
*** Failers
|
|||
|
No match
|
|||
|
ab1e
|
|||
|
No match
|
|||
|
|
|||
|
/"([^\\"]+|\\.)*"/
|
|||
|
the \"quick\" brown fox
|
|||
|
0: "quick"
|
|||
|
1: quick
|
|||
|
\"the \\\"quick\\\" brown fox\"
|
|||
|
0: "the \"quick\" brown fox"
|
|||
|
1: brown fox
|
|||
|
|
|||
|
/.*?/g+
|
|||
|
abc
|
|||
|
0:
|
|||
|
0+ abc
|
|||
|
0: a
|
|||
|
0+ bc
|
|||
|
0:
|
|||
|
0+ bc
|
|||
|
0: b
|
|||
|
0+ c
|
|||
|
0:
|
|||
|
0+ c
|
|||
|
0: c
|
|||
|
0+
|
|||
|
0:
|
|||
|
0+
|
|||
|
|
|||
|
/\b/g+
|
|||
|
abc
|
|||
|
0:
|
|||
|
0+ abc
|
|||
|
0:
|
|||
|
0+
|
|||
|
|
|||
|
/\b/+g
|
|||
|
abc
|
|||
|
0:
|
|||
|
0+ abc
|
|||
|
0:
|
|||
|
0+
|
|||
|
|
|||
|
//g
|
|||
|
abc
|
|||
|
0:
|
|||
|
0:
|
|||
|
0:
|
|||
|
0:
|
|||
|
|
|||
|
/ End of test input /
|
|||
|
|