You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6657 lines
122 KiB
6657 lines
122 KiB
# 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.sh script.
|
|
|
|
# WARNING: Use only / as the pattern delimiter. Although pcre2test supports
|
|
# a number of delimiters, all those other than / give problems with the
|
|
# perltest.sh script.
|
|
|
|
#forbid_utf
|
|
#newline_default lf any anycrlf
|
|
#perltest
|
|
|
|
/the quick brown fox/
|
|
the quick brown fox
|
|
What do you know about the quick brown fox?
|
|
\= Expect no match
|
|
The quick brown FOX
|
|
What do you know about THE QUICK BROWN FOX?
|
|
|
|
/The quick brown fox/i
|
|
the quick brown fox
|
|
The quick brown FOX
|
|
What do you know about the quick brown fox?
|
|
What do you know about THE QUICK BROWN FOX?
|
|
|
|
/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
|
|
abcd\t\n\r\f\a\e9;\$\\?caxyz
|
|
|
|
/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
|
|
abxyzpqrrrabbxyyyypqAzz
|
|
abxyzpqrrrabbxyyyypqAzz
|
|
aabxyzpqrrrabbxyyyypqAzz
|
|
aaabxyzpqrrrabbxyyyypqAzz
|
|
aaaabxyzpqrrrabbxyyyypqAzz
|
|
abcxyzpqrrrabbxyyyypqAzz
|
|
aabcxyzpqrrrabbxyyyypqAzz
|
|
aaabcxyzpqrrrabbxyyyypAzz
|
|
aaabcxyzpqrrrabbxyyyypqAzz
|
|
aaabcxyzpqrrrabbxyyyypqqAzz
|
|
aaabcxyzpqrrrabbxyyyypqqqAzz
|
|
aaabcxyzpqrrrabbxyyyypqqqqAzz
|
|
aaabcxyzpqrrrabbxyyyypqqqqqAzz
|
|
aaabcxyzpqrrrabbxyyyypqqqqqqAzz
|
|
aaaabcxyzpqrrrabbxyyyypqAzz
|
|
abxyzzpqrrrabbxyyyypqAzz
|
|
aabxyzzzpqrrrabbxyyyypqAzz
|
|
aaabxyzzzzpqrrrabbxyyyypqAzz
|
|
aaaabxyzzzzpqrrrabbxyyyypqAzz
|
|
abcxyzzpqrrrabbxyyyypqAzz
|
|
aabcxyzzzpqrrrabbxyyyypqAzz
|
|
aaabcxyzzzzpqrrrabbxyyyypqAzz
|
|
aaaabcxyzzzzpqrrrabbxyyyypqAzz
|
|
aaaabcxyzzzzpqrrrabbbxyyyypqAzz
|
|
aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
|
|
aaabcxyzpqrrrabbxyyyypABzz
|
|
aaabcxyzpqrrrabbxyyyypABBzz
|
|
>>>aaabxyzpqrrrabbxyyyypqAzz
|
|
>aaaabxyzpqrrrabbxyyyypqAzz
|
|
>>>>abcxyzpqrrrabbxyyyypqAzz
|
|
\= Expect no match
|
|
abxyzpqrrabbxyyyypqAzz
|
|
abxyzpqrrrrabbxyyyypqAzz
|
|
abxyzpqrrrabxyyyypqAzz
|
|
aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
|
|
aaaabcxyzzzzpqrrrabbbxyyypqAzz
|
|
aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
|
|
|
|
/^(abc){1,2}zz/
|
|
abczz
|
|
abcabczz
|
|
\= Expect no match
|
|
zz
|
|
abcabcabczz
|
|
>>abczz
|
|
|
|
/^(b+?|a){1,2}?c/
|
|
bc
|
|
bbc
|
|
bbbc
|
|
bac
|
|
bbac
|
|
aac
|
|
abbbbbbbbbbbc
|
|
bbbbbbbbbbbac
|
|
\= Expect no match
|
|
aaac
|
|
abbbbbbbbbbbac
|
|
|
|
/^(b+|a){1,2}c/
|
|
bc
|
|
bbc
|
|
bbbc
|
|
bac
|
|
bbac
|
|
aac
|
|
abbbbbbbbbbbc
|
|
bbbbbbbbbbbac
|
|
\= Expect no match
|
|
aaac
|
|
abbbbbbbbbbbac
|
|
|
|
/^(ba|b*){1,2}?bc/
|
|
babc
|
|
bbabc
|
|
bababc
|
|
\= Expect no match
|
|
bababbc
|
|
babababc
|
|
|
|
/^\ca\cA\c[;\c:/
|
|
\x01\x01\e;z
|
|
|
|
/^[ab\]cde]/
|
|
athing
|
|
bthing
|
|
]thing
|
|
cthing
|
|
dthing
|
|
ething
|
|
\= Expect no match
|
|
fthing
|
|
[thing
|
|
\\thing
|
|
|
|
/^[]cde]/
|
|
]thing
|
|
cthing
|
|
dthing
|
|
ething
|
|
\= Expect no match
|
|
athing
|
|
fthing
|
|
|
|
/^[^ab\]cde]/
|
|
fthing
|
|
[thing
|
|
\\thing
|
|
\= Expect no match
|
|
athing
|
|
bthing
|
|
]thing
|
|
cthing
|
|
dthing
|
|
ething
|
|
|
|
/^[^]cde]/
|
|
athing
|
|
fthing
|
|
\= Expect no match
|
|
]thing
|
|
cthing
|
|
dthing
|
|
ething
|
|
|
|
/^\�/
|
|
�
|
|
|
|
/^ÿ/
|
|
ÿ
|
|
|
|
/^[0-9]+$/
|
|
0
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
100
|
|
\= Expect no match
|
|
abc
|
|
|
|
/^.*nter/
|
|
enter
|
|
inter
|
|
uponter
|
|
|
|
/^xxx[0-9]+$/
|
|
xxx0
|
|
xxx1234
|
|
\= Expect no match
|
|
xxx
|
|
|
|
/^.+[0-9][0-9][0-9]$/
|
|
x123
|
|
x1234
|
|
xx123
|
|
123456
|
|
\= Expect no match
|
|
123
|
|
|
|
/^.+?[0-9][0-9][0-9]$/
|
|
x123
|
|
x1234
|
|
xx123
|
|
123456
|
|
\= Expect no match
|
|
123
|
|
|
|
/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
|
|
abc!pqr=apquxz.ixr.zzz.ac.uk
|
|
\= Expect no match
|
|
!pqr=apquxz.ixr.zzz.ac.uk
|
|
abc!=apquxz.ixr.zzz.ac.uk
|
|
abc!pqr=apquxz:ixr.zzz.ac.uk
|
|
abc!pqr=apquxz.ixr.zzz.ac.ukk
|
|
|
|
/:/
|
|
Well, we need a colon: somewhere
|
|
\= Expect no match
|
|
Fail without a colon
|
|
|
|
/([\da-f:]+)$/i
|
|
0abc
|
|
abc
|
|
fed
|
|
E
|
|
::
|
|
5f03:12C0::932e
|
|
fed def
|
|
Any old stuff
|
|
\= Expect no match
|
|
0zzz
|
|
gzzz
|
|
fed\x20
|
|
Any old rubbish
|
|
|
|
/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
|
|
.1.2.3
|
|
A.12.123.0
|
|
\= Expect no match
|
|
.1.2.3333
|
|
1.2.3
|
|
1234.2.3
|
|
|
|
/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
|
|
1 IN SOA non-sp1 non-sp2(
|
|
1 IN SOA non-sp1 non-sp2 (
|
|
\= Expect no match
|
|
1IN SOA non-sp1 non-sp2(
|
|
|
|
/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
|
|
a.
|
|
Z.
|
|
2.
|
|
ab-c.pq-r.
|
|
sxk.zzz.ac.uk.
|
|
x-.y-.
|
|
\= Expect no match
|
|
-abc.peq.
|
|
|
|
/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
|
|
*.a
|
|
*.b0-a
|
|
*.c3-b.c
|
|
*.c-a.b-c
|
|
\= Expect no match
|
|
*.0
|
|
*.a-
|
|
*.a-b.c-
|
|
*.c-a.0-c
|
|
|
|
/^(?=ab(de))(abd)(e)/
|
|
abde
|
|
|
|
/^(?!(ab)de|x)(abd)(f)/
|
|
abdf
|
|
|
|
/^(?=(ab(cd)))(ab)/
|
|
abcd
|
|
|
|
/^[\da-f](\.[\da-f])*$/i
|
|
a.b.c.d
|
|
A.B.C.D
|
|
a.b.c.1.2.3.C
|
|
|
|
/^\".*\"\s*(;.*)?$/
|
|
\"1234\"
|
|
\"abcd\" ;
|
|
\"\" ; rhubarb
|
|
\= Expect no match
|
|
\"1234\" : things
|
|
|
|
/^$/
|
|
\
|
|
\= Expect no match
|
|
A non-empty line
|
|
|
|
/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
|
|
ab c
|
|
\= Expect no match
|
|
abc
|
|
ab cde
|
|
|
|
/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
|
|
ab c
|
|
\= Expect no match
|
|
abc
|
|
ab cde
|
|
|
|
/^ a\ b[c ]d $/x
|
|
a bcd
|
|
a b d
|
|
\= Expect no match
|
|
abcd
|
|
ab d
|
|
|
|
/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
|
|
abcdefhijklm
|
|
|
|
/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
|
|
abcdefhijklm
|
|
|
|
/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
|
|
a+ Z0+\x08\n\x1d\x12
|
|
|
|
/^[.^$|()*+?{,}]+/
|
|
.^\$(*+)|{?,?}
|
|
|
|
/^a*\w/
|
|
z
|
|
az
|
|
aaaz
|
|
a
|
|
aa
|
|
aaaa
|
|
a+
|
|
aa+
|
|
|
|
/^a*?\w/
|
|
z
|
|
az
|
|
aaaz
|
|
a
|
|
aa
|
|
aaaa
|
|
a+
|
|
aa+
|
|
|
|
/^a+\w/
|
|
az
|
|
aaaz
|
|
aa
|
|
aaaa
|
|
aa+
|
|
|
|
/^a+?\w/
|
|
az
|
|
aaaz
|
|
aa
|
|
aaaa
|
|
aa+
|
|
|
|
/^\d{8}\w{2,}/
|
|
1234567890
|
|
12345678ab
|
|
12345678__
|
|
\= Expect no match
|
|
1234567
|
|
|
|
/^[aeiou\d]{4,5}$/
|
|
uoie
|
|
1234
|
|
12345
|
|
aaaaa
|
|
\= Expect no match
|
|
123456
|
|
|
|
/^[aeiou\d]{4,5}?/
|
|
uoie
|
|
1234
|
|
12345
|
|
aaaaa
|
|
123456
|
|
|
|
/\A(abc|def)=(\1){2,3}\Z/
|
|
abc=abcabc
|
|
def=defdefdef
|
|
\= Expect no match
|
|
abc=defdef
|
|
|
|
/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
|
|
abcdefghijkcda2
|
|
abcdefghijkkkkcda2
|
|
|
|
/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
|
|
cataract cataract23
|
|
catatonic catatonic23
|
|
caterpillar caterpillar23
|
|
|
|
|
|
/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
|
|
From abcd Mon Sep 01 12:33:02 1997
|
|
|
|
/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
|
|
From abcd Mon Sep 01 12:33:02 1997
|
|
From abcd Mon Sep 1 12:33:02 1997
|
|
\= Expect no match
|
|
From abcd Sep 01 12:33:02 1997
|
|
|
|
/^12.34/s
|
|
12\n34
|
|
12\r34
|
|
|
|
/\w+(?=\t)/
|
|
the quick brown\t fox
|
|
|
|
/foo(?!bar)(.*)/
|
|
foobar is foolish see?
|
|
|
|
/(?:(?!foo)...|^.{0,2})bar(.*)/
|
|
foobar crowbar etc
|
|
barrel
|
|
2barrel
|
|
A barrel
|
|
|
|
/^(\D*)(?=\d)(?!123)/
|
|
abc456
|
|
\= Expect no match
|
|
abc123
|
|
|
|
/^1234(?# test newlines
|
|
inside)/
|
|
1234
|
|
|
|
/^1234 #comment in extended re
|
|
/x
|
|
1234
|
|
|
|
/#rhubarb
|
|
abcd/x
|
|
abcd
|
|
|
|
/^abcd#rhubarb/x
|
|
abcd
|
|
|
|
/^(a)\1{2,3}(.)/
|
|
aaab
|
|
aaaab
|
|
aaaaab
|
|
aaaaaab
|
|
|
|
/(?!^)abc/
|
|
the abc
|
|
\= Expect no match
|
|
abc
|
|
|
|
/(?=^)abc/
|
|
abc
|
|
\= Expect no match
|
|
the abc
|
|
|
|
/^[ab]{1,3}(ab*|b)/
|
|
aabbbbb
|
|
|
|
/^[ab]{1,3}?(ab*|b)/
|
|
aabbbbb
|
|
|
|
/^[ab]{1,3}?(ab*?|b)/
|
|
aabbbbb
|
|
|
|
/^[ab]{1,3}(ab*?|b)/
|
|
aabbbbb
|
|
|
|
/ (?: [\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>
|
|
<user\@dom.ain>
|
|
user\@dom.ain
|
|
\"A. Other\" <user.1234\@dom.ain> (a comment)
|
|
A. Other <user.1234\@dom.ain> (a comment)
|
|
\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
|
|
A missing angle <user\@some.where
|
|
\= Expect no match
|
|
The quick brown fox
|
|
|
|
/[\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>
|
|
<user\@dom.ain>
|
|
user\@dom.ain
|
|
\"A. Other\" <user.1234\@dom.ain> (a comment)
|
|
A. Other <user.1234\@dom.ain> (a comment)
|
|
\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
|
|
A missing angle <user\@some.where
|
|
\= Expect no match
|
|
The quick brown fox
|
|
|
|
/abc\0def\00pqr\000xyz\0000AB/
|
|
abc\0def\00pqr\000xyz\0000AB
|
|
abc456 abc\0def\00pqr\000xyz\0000ABCDE
|
|
|
|
/abc\x0def\x00pqr\x000xyz\x0000AB/
|
|
abc\x0def\x00pqr\x000xyz\x0000AB
|
|
abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
|
|
|
|
/^[\000-\037]/
|
|
\0A
|
|
\01B
|
|
\037C
|
|
|
|
/\0*/
|
|
\0\0\0\0
|
|
|
|
/A\x0{2,3}Z/
|
|
The A\x0\x0Z
|
|
An A\0\x0\0Z
|
|
\= Expect no match
|
|
A\0Z
|
|
A\0\x0\0\x0Z
|
|
|
|
/^(cow|)\1(bell)/
|
|
cowcowbell
|
|
bell
|
|
\= Expect no match
|
|
cowbell
|
|
|
|
/^\s/
|
|
\040abc
|
|
\x0cabc
|
|
\nabc
|
|
\rabc
|
|
\tabc
|
|
\= Expect no match
|
|
abc
|
|
|
|
/^a b
|
|
c/x
|
|
abc
|
|
|
|
/^(a|)\1*b/
|
|
ab
|
|
aaaab
|
|
b
|
|
\= Expect no match
|
|
acb
|
|
|
|
/^(a|)\1+b/
|
|
aab
|
|
aaaab
|
|
b
|
|
\= Expect no match
|
|
ab
|
|
|
|
/^(a|)\1?b/
|
|
ab
|
|
aab
|
|
b
|
|
\= Expect no match
|
|
acb
|
|
|
|
/^(a|)\1{2}b/
|
|
aaab
|
|
b
|
|
\= Expect no match
|
|
ab
|
|
aab
|
|
aaaab
|
|
|
|
/^(a|)\1{2,3}b/
|
|
aaab
|
|
aaaab
|
|
b
|
|
\= Expect no match
|
|
ab
|
|
aab
|
|
aaaaab
|
|
|
|
/ab{1,3}bc/
|
|
abbbbc
|
|
abbbc
|
|
abbc
|
|
\= Expect no match
|
|
abc
|
|
abbbbbc
|
|
|
|
/([^.]*)\.([^:]*):[T ]+(.*)/
|
|
track1.title:TBlah blah blah
|
|
|
|
/([^.]*)\.([^:]*):[T ]+(.*)/i
|
|
track1.title:TBlah blah blah
|
|
|
|
/([^.]*)\.([^:]*):[t ]+(.*)/i
|
|
track1.title:TBlah blah blah
|
|
|
|
/^[W-c]+$/
|
|
WXY_^abc
|
|
\= Expect no match
|
|
wxy
|
|
|
|
/^[W-c]+$/i
|
|
WXY_^abc
|
|
wxy_^ABC
|
|
|
|
/^[\x3f-\x5F]+$/i
|
|
WXY_^abc
|
|
wxy_^ABC
|
|
|
|
/^abc$/m
|
|
abc
|
|
qqq\nabc
|
|
abc\nzzz
|
|
qqq\nabc\nzzz
|
|
|
|
/^abc$/
|
|
abc
|
|
\= Expect no match
|
|
qqq\nabc
|
|
abc\nzzz
|
|
qqq\nabc\nzzz
|
|
|
|
/\Aabc\Z/m
|
|
abc
|
|
abc\n
|
|
\= Expect no match
|
|
qqq\nabc
|
|
abc\nzzz
|
|
qqq\nabc\nzzz
|
|
|
|
/\A(.)*\Z/s
|
|
abc\ndef
|
|
|
|
/\A(.)*\Z/m
|
|
\= Expect no match
|
|
abc\ndef
|
|
|
|
/(?:b)|(?::+)/
|
|
b::c
|
|
c::b
|
|
|
|
/[-az]+/
|
|
az-
|
|
\= Expect no match
|
|
b
|
|
|
|
/[az-]+/
|
|
za-
|
|
\= Expect no match
|
|
b
|
|
|
|
/[a\-z]+/
|
|
a-z
|
|
\= Expect no match
|
|
b
|
|
|
|
/[a-z]+/
|
|
abcdxyz
|
|
|
|
/[\d-]+/
|
|
12-34
|
|
\= Expect no match
|
|
aaa
|
|
|
|
/\x5c/
|
|
\\
|
|
|
|
/\x20Z/
|
|
the Zoo
|
|
\= Expect no match
|
|
Zulu
|
|
|
|
/(abc)\1/i
|
|
abcabc
|
|
ABCabc
|
|
abcABC
|
|
|
|
/abc$/
|
|
abc
|
|
abc\n
|
|
\= Expect no match
|
|
abc\ndef
|
|
|
|
/(abc)\123/
|
|
abc\x53
|
|
|
|
/(abc)\223/
|
|
abc\x93
|
|
|
|
/(abc)\323/
|
|
abc\xd3
|
|
|
|
/(abc)\100/
|
|
abc\x40
|
|
abc\100
|
|
|
|
/(abc)\1000/
|
|
abc\x400
|
|
abc\x40\x30
|
|
abc\1000
|
|
abc\100\x30
|
|
abc\100\060
|
|
abc\100\60
|
|
|
|
/^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/
|
|
ABCDEFGHIHI
|
|
|
|
/^[A\8B\9C]+$/
|
|
A8B9C
|
|
\= Expect no match
|
|
A8B9C\x00
|
|
|
|
/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
|
|
abcdefghijkllS
|
|
|
|
/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
|
|
abcdefghijk\12S
|
|
|
|
/a{0}bc/
|
|
bc
|
|
|
|
/(a|(bc)){0,0}?xyz/
|
|
xyz
|
|
|
|
/abc[\10]de/
|
|
abc\010de
|
|
|
|
/abc[\1]de/
|
|
abc\1de
|
|
|
|
/(abc)[\1]de/
|
|
abc\1de
|
|
|
|
/(?s)a.b/
|
|
a\nb
|
|
|
|
/^([^a])([^\b])([^c]*)([^d]{3,4})/
|
|
baNOTccccd
|
|
baNOTcccd
|
|
baNOTccd
|
|
bacccd
|
|
\= Expect no match
|
|
anything
|
|
b\bc
|
|
baccd
|
|
|
|
/[^a]/
|
|
Abc
|
|
|
|
/[^a]/i
|
|
Abc
|
|
|
|
/[^a]+/
|
|
AAAaAbc
|
|
|
|
/[^a]+/i
|
|
AAAaAbc
|
|
|
|
/[^a]+/
|
|
bbb\nccc
|
|
|
|
/[^k]$/
|
|
abc
|
|
\= Expect no match
|
|
abk
|
|
|
|
/[^k]{2,3}$/
|
|
abc
|
|
kbc
|
|
kabc
|
|
\= Expect no match
|
|
abk
|
|
akb
|
|
akk
|
|
|
|
/^\d{8,}\@.+[^k]$/
|
|
12345678\@a.b.c.d
|
|
123456789\@x.y.z
|
|
\= Expect no match
|
|
12345678\@x.y.uk
|
|
1234567\@a.b.c.d
|
|
|
|
/(a)\1{8,}/
|
|
aaaaaaaaa
|
|
aaaaaaaaaa
|
|
\= Expect no match
|
|
aaaaaaa
|
|
|
|
/[^a]/
|
|
aaaabcd
|
|
aaAabcd
|
|
|
|
/[^a]/i
|
|
aaaabcd
|
|
aaAabcd
|
|
|
|
/[^az]/
|
|
aaaabcd
|
|
aaAabcd
|
|
|
|
/[^az]/i
|
|
aaaabcd
|
|
aaAabcd
|
|
|
|
/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
|
|
\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
|
|
|
|
/P[^*]TAIRE[^*]{1,6}?LL/
|
|
xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
|
|
|
|
/P[^*]TAIRE[^*]{1,}?LL/
|
|
xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
|
|
|
|
/(\.\d\d[1-9]?)\d+/
|
|
1.230003938
|
|
1.875000282
|
|
1.235
|
|
|
|
/(\.\d\d((?=0)|\d(?=\d)))/
|
|
1.230003938
|
|
1.875000282
|
|
\= Expect no match
|
|
1.235
|
|
|
|
/a(?)b/
|
|
ab
|
|
|
|
/\b(foo)\s+(\w+)/i
|
|
Food is on the foo table
|
|
|
|
/foo(.*)bar/
|
|
The food is under the bar in the barn.
|
|
|
|
/foo(.*?)bar/
|
|
The food is under the bar in the barn.
|
|
|
|
/(.*)(\d*)/
|
|
I have 2 numbers: 53147
|
|
|
|
/(.*)(\d+)/
|
|
I have 2 numbers: 53147
|
|
|
|
/(.*?)(\d*)/
|
|
I have 2 numbers: 53147
|
|
|
|
/(.*?)(\d+)/
|
|
I have 2 numbers: 53147
|
|
|
|
/(.*)(\d+)$/
|
|
I have 2 numbers: 53147
|
|
|
|
/(.*?)(\d+)$/
|
|
I have 2 numbers: 53147
|
|
|
|
/(.*)\b(\d+)$/
|
|
I have 2 numbers: 53147
|
|
|
|
/(.*\D)(\d+)$/
|
|
I have 2 numbers: 53147
|
|
|
|
/^\D*(?!123)/
|
|
ABC123
|
|
|
|
/^(\D*)(?=\d)(?!123)/
|
|
ABC445
|
|
\= Expect no match
|
|
ABC123
|
|
|
|
/^[W-]46]/
|
|
W46]789
|
|
-46]789
|
|
\= Expect no match
|
|
Wall
|
|
Zebra
|
|
42
|
|
[abcd]
|
|
]abcd[
|
|
|
|
/^[W-\]46]/
|
|
W46]789
|
|
Wall
|
|
Zebra
|
|
Xylophone
|
|
42
|
|
[abcd]
|
|
]abcd[
|
|
\\backslash
|
|
\= Expect no match
|
|
-46]789
|
|
well
|
|
|
|
/\d\d\/\d\d\/\d\d\d\d/
|
|
01/01/2000
|
|
|
|
/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
|
|
word cat dog elephant mussel cow horse canary baboon snake shark otherword
|
|
\= Expect no match
|
|
word cat dog elephant mussel cow horse canary baboon snake shark
|
|
|
|
/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
|
|
|
|
/^(a){0,0}/
|
|
bcd
|
|
abc
|
|
aab
|
|
|
|
/^(a){0,1}/
|
|
bcd
|
|
abc
|
|
aab
|
|
|
|
/^(a){0,2}/
|
|
bcd
|
|
abc
|
|
aab
|
|
|
|
/^(a){0,3}/
|
|
bcd
|
|
abc
|
|
aab
|
|
aaa
|
|
|
|
/^(a){0,}/
|
|
bcd
|
|
abc
|
|
aab
|
|
aaa
|
|
aaaaaaaa
|
|
|
|
/^(a){1,1}/
|
|
abc
|
|
aab
|
|
\= Expect no match
|
|
bcd
|
|
|
|
/^(a){1,2}/
|
|
abc
|
|
aab
|
|
\= Expect no match
|
|
bcd
|
|
|
|
/^(a){1,3}/
|
|
abc
|
|
aab
|
|
aaa
|
|
\= Expect no match
|
|
bcd
|
|
|
|
/^(a){1,}/
|
|
abc
|
|
aab
|
|
aaa
|
|
aaaaaaaa
|
|
\= Expect no match
|
|
bcd
|
|
|
|
/.*\.gif/
|
|
borfle\nbib.gif\nno
|
|
|
|
/.{0,}\.gif/
|
|
borfle\nbib.gif\nno
|
|
|
|
/.*\.gif/m
|
|
borfle\nbib.gif\nno
|
|
|
|
/.*\.gif/s
|
|
borfle\nbib.gif\nno
|
|
|
|
/.*\.gif/ms
|
|
borfle\nbib.gif\nno
|
|
|
|
/.*$/
|
|
borfle\nbib.gif\nno
|
|
|
|
/.*$/m
|
|
borfle\nbib.gif\nno
|
|
|
|
/.*$/s
|
|
borfle\nbib.gif\nno
|
|
|
|
/.*$/ms
|
|
borfle\nbib.gif\nno
|
|
|
|
/.*$/
|
|
borfle\nbib.gif\nno\n
|
|
|
|
/.*$/m
|
|
borfle\nbib.gif\nno\n
|
|
|
|
/.*$/s
|
|
borfle\nbib.gif\nno\n
|
|
|
|
/.*$/ms
|
|
borfle\nbib.gif\nno\n
|
|
|
|
/(.*X|^B)/
|
|
abcde\n1234Xyz
|
|
BarFoo
|
|
\= Expect no match
|
|
abcde\nBar
|
|
|
|
/(.*X|^B)/m
|
|
abcde\n1234Xyz
|
|
BarFoo
|
|
abcde\nBar
|
|
|
|
/(.*X|^B)/s
|
|
abcde\n1234Xyz
|
|
BarFoo
|
|
\= Expect no match
|
|
abcde\nBar
|
|
|
|
/(.*X|^B)/ms
|
|
abcde\n1234Xyz
|
|
BarFoo
|
|
abcde\nBar
|
|
|
|
/(?s)(.*X|^B)/
|
|
abcde\n1234Xyz
|
|
BarFoo
|
|
\= Expect no match
|
|
abcde\nBar
|
|
|
|
/(?s:.*X|^B)/
|
|
abcde\n1234Xyz
|
|
BarFoo
|
|
\= Expect no match
|
|
abcde\nBar
|
|
|
|
/^.*B/
|
|
\= Expect no match
|
|
abc\nB
|
|
|
|
/(?s)^.*B/
|
|
abc\nB
|
|
|
|
/(?m)^.*B/
|
|
abc\nB
|
|
|
|
/(?ms)^.*B/
|
|
abc\nB
|
|
|
|
/(?ms)^B/
|
|
abc\nB
|
|
|
|
/(?s)B$/
|
|
B\n
|
|
|
|
/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
|
|
123456654321
|
|
|
|
/^\d\d\d\d\d\d\d\d\d\d\d\d/
|
|
123456654321
|
|
|
|
/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
|
|
123456654321
|
|
|
|
/^[abc]{12}/
|
|
abcabcabcabc
|
|
|
|
/^[a-c]{12}/
|
|
abcabcabcabc
|
|
|
|
/^(a|b|c){12}/
|
|
abcabcabcabc
|
|
|
|
/^[abcdefghijklmnopqrstuvwxy0123456789]/
|
|
n
|
|
\= Expect no match
|
|
z
|
|
|
|
/abcde{0,0}/
|
|
abcd
|
|
\= Expect no match
|
|
abce
|
|
|
|
/ab[cd]{0,0}e/
|
|
abe
|
|
\= Expect no match
|
|
abcde
|
|
|
|
/ab(c){0,0}d/
|
|
abd
|
|
\= Expect no match
|
|
abcd
|
|
|
|
/a(b*)/
|
|
a
|
|
ab
|
|
abbbb
|
|
\= Expect no match
|
|
bbbbb
|
|
|
|
/ab\d{0}e/
|
|
abe
|
|
\= Expect no match
|
|
ab1e
|
|
|
|
/"([^\\"]+|\\.)*"/
|
|
the \"quick\" brown fox
|
|
\"the \\\"quick\\\" brown fox\"
|
|
|
|
/.*?/g,aftertext
|
|
abc
|
|
|
|
/\b/g,aftertext
|
|
abc
|
|
|
|
/\b/g,aftertext
|
|
abc
|
|
|
|
//g
|
|
abc
|
|
|
|
/<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>
|
|
|
|
/a[^a]b/
|
|
acb
|
|
a\nb
|
|
|
|
/a.b/
|
|
acb
|
|
\= Expect no match
|
|
a\nb
|
|
|
|
/a[^a]b/s
|
|
acb
|
|
a\nb
|
|
|
|
/a.b/s
|
|
acb
|
|
a\nb
|
|
|
|
/^(b+?|a){1,2}?c/
|
|
bac
|
|
bbac
|
|
bbbac
|
|
bbbbac
|
|
bbbbbac
|
|
|
|
/^(b+|a){1,2}?c/
|
|
bac
|
|
bbac
|
|
bbbac
|
|
bbbbac
|
|
bbbbbac
|
|
|
|
/(?!\A)x/m
|
|
a\bx\n
|
|
a\nx\n
|
|
\= Expect no match
|
|
x\nb\n
|
|
|
|
/(A|B)*?CD/
|
|
CD
|
|
|
|
/(A|B)*CD/
|
|
CD
|
|
|
|
/(AB)*?\1/
|
|
ABABAB
|
|
|
|
/(AB)*\1/
|
|
ABABAB
|
|
|
|
/(?<!bar)foo/
|
|
foo
|
|
catfood
|
|
arfootle
|
|
rfoosh
|
|
\= Expect no match
|
|
barfoo
|
|
towbarfoo
|
|
|
|
/\w{3}(?<!bar)foo/
|
|
catfood
|
|
\= Expect no match
|
|
foo
|
|
barfoo
|
|
towbarfoo
|
|
|
|
/(?<=(foo)a)bar/
|
|
fooabar
|
|
\= Expect no match
|
|
bar
|
|
foobbar
|
|
|
|
/\Aabc\z/m
|
|
abc
|
|
\= Expect no match
|
|
abc\n
|
|
qqq\nabc
|
|
abc\nzzz
|
|
qqq\nabc\nzzz
|
|
|
|
/(?>.*\/)foo/
|
|
/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/
|
|
|
|
/(?>(\.\d\d[1-9]?))\d+/
|
|
1.230003938
|
|
1.875000282
|
|
\= Expect no match
|
|
1.235
|
|
|
|
/^((?>\w+)|(?>\s+))*$/
|
|
now is the time for all good men to come to the aid of the party
|
|
\= Expect no match
|
|
this is not a line with only words and spaces!
|
|
|
|
/(\d+)(\w)/
|
|
12345a
|
|
12345+
|
|
|
|
/((?>\d+))(\w)/
|
|
12345a
|
|
\= Expect no match
|
|
12345+
|
|
|
|
/(?>a+)b/
|
|
aaab
|
|
|
|
/((?>a+)b)/
|
|
aaab
|
|
|
|
/(?>(a+))b/
|
|
aaab
|
|
|
|
/(?>b)+/
|
|
aaabbbccc
|
|
|
|
/(?>a+|b+|c+)*c/
|
|
aaabbbbccccd
|
|
|
|
/((?>[^()]+)|\([^()]*\))+/
|
|
((abc(ade)ufh()()x
|
|
|
|
/\(((?>[^()]+)|\([^()]+\))+\)/
|
|
(abc)
|
|
(abc(def)xyz)
|
|
\= Expect no match
|
|
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|
|
|
/a(?-i)b/i
|
|
ab
|
|
Ab
|
|
\= Expect no match
|
|
aB
|
|
AB
|
|
|
|
/(a (?x)b c)d e/
|
|
a bcd e
|
|
\= Expect no match
|
|
a b cd e
|
|
abcd e
|
|
a bcde
|
|
|
|
/(a b(?x)c d (?-x)e f)/
|
|
a bcde f
|
|
\= Expect no match
|
|
abcdef
|
|
|
|
/(a(?i)b)c/
|
|
abc
|
|
aBc
|
|
\= Expect no match
|
|
abC
|
|
aBC
|
|
Abc
|
|
ABc
|
|
ABC
|
|
AbC
|
|
|
|
/a(?i:b)c/
|
|
abc
|
|
aBc
|
|
\= Expect no match
|
|
ABC
|
|
abC
|
|
aBC
|
|
|
|
/a(?i:b)*c/
|
|
aBc
|
|
aBBc
|
|
\= Expect no match
|
|
aBC
|
|
aBBC
|
|
|
|
/a(?=b(?i)c)\w\wd/
|
|
abcd
|
|
abCd
|
|
\= Expect no match
|
|
aBCd
|
|
abcD
|
|
|
|
/(?s-i:more.*than).*million/i
|
|
more than million
|
|
more than MILLION
|
|
more \n than Million
|
|
\= Expect no match
|
|
MORE THAN MILLION
|
|
more \n than \n million
|
|
|
|
/(?:(?s-i)more.*than).*million/i
|
|
more than million
|
|
more than MILLION
|
|
more \n than Million
|
|
\= Expect no match
|
|
MORE THAN MILLION
|
|
more \n than \n million
|
|
|
|
/(?>a(?i)b+)+c/
|
|
abc
|
|
aBbc
|
|
aBBc
|
|
\= Expect no match
|
|
Abc
|
|
abAb
|
|
abbC
|
|
|
|
/(?=a(?i)b)\w\wc/
|
|
abc
|
|
aBc
|
|
\= Expect no match
|
|
Ab
|
|
abC
|
|
aBC
|
|
|
|
/(?<=a(?i)b)(\w\w)c/
|
|
abxxc
|
|
aBxxc
|
|
\= Expect no match
|
|
Abxxc
|
|
ABxxc
|
|
abxxC
|
|
|
|
/(?:(a)|b)(?(1)A|B)/
|
|
aA
|
|
bB
|
|
\= Expect no match
|
|
aB
|
|
bA
|
|
|
|
/^(a)?(?(1)a|b)+$/
|
|
aa
|
|
b
|
|
bb
|
|
\= Expect no match
|
|
ab
|
|
|
|
# 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:
|
|
12
|
|
123
|
|
\= Expect no match
|
|
xyz
|
|
|
|
/^(?(?!abc)\d\d|\w{3}:)$/
|
|
abc:
|
|
12
|
|
\= Expect no match
|
|
123
|
|
xyz
|
|
|
|
/(?(?<=foo)bar|cat)/
|
|
foobar
|
|
cat
|
|
fcat
|
|
focat
|
|
\= Expect no match
|
|
foocat
|
|
|
|
/(?(?<!foo)cat|bar)/
|
|
foobar
|
|
cat
|
|
fcat
|
|
focat
|
|
\= Expect no match
|
|
foocat
|
|
|
|
/( \( )? [^()]+ (?(1) \) |) /x
|
|
abcd
|
|
(abcd)
|
|
the quick (abcd) fox
|
|
(abcd
|
|
|
|
/( \( )? [^()]+ (?(1) \) ) /x
|
|
abcd
|
|
(abcd)
|
|
the quick (abcd) fox
|
|
(abcd
|
|
|
|
/^(?(2)a|(1)(2))+$/
|
|
12
|
|
12a
|
|
12aa
|
|
\= Expect no match
|
|
1234
|
|
|
|
/((?i)blah)\s+\1/
|
|
blah blah
|
|
BLAH BLAH
|
|
Blah Blah
|
|
blaH blaH
|
|
\= Expect no match
|
|
blah BLAH
|
|
Blah blah
|
|
blaH blah
|
|
|
|
/((?i)blah)\s+(?i:\1)/
|
|
blah blah
|
|
BLAH BLAH
|
|
Blah Blah
|
|
blaH blaH
|
|
blah BLAH
|
|
Blah blah
|
|
blaH blah
|
|
|
|
/((?i)blah)\s+(?m)A(?i:\1)/
|
|
blah ABLAH
|
|
\= Expect no match
|
|
blah aBLAH
|
|
|
|
/(?>a*)*/
|
|
a
|
|
aa
|
|
aaaa
|
|
|
|
/(abc|)+/
|
|
abc
|
|
abcabc
|
|
abcabcabc
|
|
xyz
|
|
|
|
/([a]*)*/
|
|
a
|
|
aaaaa
|
|
|
|
/([ab]*)*/
|
|
a
|
|
b
|
|
ababab
|
|
aaaabcde
|
|
bbbb
|
|
|
|
/([^a]*)*/
|
|
b
|
|
bbbb
|
|
aaa
|
|
|
|
/([^ab]*)*/
|
|
cccc
|
|
abab
|
|
|
|
/([a]*?)*/
|
|
a
|
|
aaaa
|
|
|
|
/([ab]*?)*/
|
|
a
|
|
b
|
|
abab
|
|
baba
|
|
|
|
/([^a]*?)*/
|
|
b
|
|
bbbb
|
|
aaa
|
|
|
|
/([^ab]*?)*/
|
|
c
|
|
cccc
|
|
baba
|
|
|
|
/(?>a*)*/
|
|
a
|
|
aaabcde
|
|
|
|
/((?>a*))*/
|
|
aaaaa
|
|
aabbaa
|
|
|
|
/((?>a*?))*/
|
|
aaaaa
|
|
aabbaa
|
|
|
|
/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
|
|
12-sep-98
|
|
12-09-98
|
|
\= Expect no match
|
|
sep-12-98
|
|
|
|
/(?<=(foo))bar\1/
|
|
foobarfoo
|
|
foobarfootling
|
|
\= Expect no match
|
|
foobar
|
|
barfoo
|
|
|
|
/(?i:saturday|sunday)/
|
|
saturday
|
|
sunday
|
|
Saturday
|
|
Sunday
|
|
SATURDAY
|
|
SUNDAY
|
|
SunDay
|
|
|
|
/(a(?i)bc|BB)x/
|
|
abcx
|
|
aBCx
|
|
bbx
|
|
BBx
|
|
\= Expect no match
|
|
abcX
|
|
aBCX
|
|
bbX
|
|
BBX
|
|
|
|
/^([ab](?i)[cd]|[ef])/
|
|
ac
|
|
aC
|
|
bD
|
|
elephant
|
|
Europe
|
|
frog
|
|
France
|
|
\= Expect no match
|
|
Africa
|
|
|
|
/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
|
|
ab
|
|
aBd
|
|
xy
|
|
xY
|
|
zebra
|
|
Zambesi
|
|
\= Expect no match
|
|
aCD
|
|
XY
|
|
|
|
/(?<=foo\n)^bar/m
|
|
foo\nbar
|
|
\= Expect no match
|
|
bar
|
|
baz\nbar
|
|
|
|
/(?<=(?<!foo)bar)baz/
|
|
barbaz
|
|
barbarbaz
|
|
koobarbaz
|
|
\= Expect no match
|
|
baz
|
|
foobarbaz
|
|
|
|
# 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
|
|
aaaaaaa
|
|
aaaaaaaaaa
|
|
\= Expect no match
|
|
a
|
|
aa
|
|
aaa
|
|
aaaaaaaa
|
|
aaaaaaaaa
|
|
aaaaaaaaaaa
|
|
aaaaaaaaaaaa
|
|
aaaaaaaaaaaaa
|
|
aaaaaaaaaaaaaa
|
|
aaaaaaaaaaaaaaa
|
|
aaaaaaaaaaaaaaaa
|
|
|
|
/^(a\1?)(a\1?)(a\2?)(a\3?)$/
|
|
aaaa
|
|
aaaaa
|
|
aaaaaa
|
|
aaaaaaa
|
|
aaaaaaaaaa
|
|
\= Expect no match
|
|
a
|
|
aa
|
|
aaa
|
|
aaaaaaaa
|
|
aaaaaaaaa
|
|
aaaaaaaaaaa
|
|
aaaaaaaaaaaa
|
|
aaaaaaaaaaaaa
|
|
aaaaaaaaaaaaaa
|
|
aaaaaaaaaaaaaaa
|
|
aaaaaaaaaaaaaaaa
|
|
|
|
# The following tests are taken from the Perl 5.005 test suite; some of them
|
|
# are compatible with 5.004, but I'd rather not have to sort them out.
|
|
|
|
/abc/
|
|
abc
|
|
xabcy
|
|
ababc
|
|
\= Expect no match
|
|
xbc
|
|
axc
|
|
abx
|
|
|
|
/ab*c/
|
|
abc
|
|
|
|
/ab*bc/
|
|
abc
|
|
abbc
|
|
abbbbc
|
|
|
|
/.{1}/
|
|
abbbbc
|
|
|
|
/.{3,4}/
|
|
abbbbc
|
|
|
|
/ab{0,}bc/
|
|
abbbbc
|
|
|
|
/ab+bc/
|
|
abbc
|
|
\= Expect no match
|
|
abc
|
|
abq
|
|
|
|
/ab{1,}bc/
|
|
|
|
/ab+bc/
|
|
abbbbc
|
|
|
|
/ab{1,}bc/
|
|
abbbbc
|
|
|
|
/ab{1,3}bc/
|
|
abbbbc
|
|
|
|
/ab{3,4}bc/
|
|
abbbbc
|
|
|
|
/ab{4,5}bc/
|
|
\= Expect no match
|
|
abq
|
|
abbbbc
|
|
|
|
/ab?bc/
|
|
abbc
|
|
abc
|
|
|
|
/ab{0,1}bc/
|
|
abc
|
|
|
|
/ab?bc/
|
|
|
|
/ab?c/
|
|
abc
|
|
|
|
/ab{0,1}c/
|
|
abc
|
|
|
|
/^abc$/
|
|
abc
|
|
\= Expect no match
|
|
abbbbc
|
|
abcc
|
|
|
|
/^abc/
|
|
abcc
|
|
|
|
/^abc$/
|
|
|
|
/abc$/
|
|
aabc
|
|
\= Expect no match
|
|
aabcd
|
|
|
|
/^/
|
|
abc
|
|
|
|
/$/
|
|
abc
|
|
|
|
/a.c/
|
|
abc
|
|
axc
|
|
|
|
/a.*c/
|
|
axyzc
|
|
|
|
/a[bc]d/
|
|
abd
|
|
\= Expect no match
|
|
axyzd
|
|
abc
|
|
|
|
/a[b-d]e/
|
|
ace
|
|
|
|
/a[b-d]/
|
|
aac
|
|
|
|
/a[-b]/
|
|
a-
|
|
|
|
/a[b-]/
|
|
a-
|
|
|
|
/a]/
|
|
a]
|
|
|
|
/a[]]b/
|
|
a]b
|
|
|
|
/a[^bc]d/
|
|
aed
|
|
\= Expect no match
|
|
abd
|
|
abd
|
|
|
|
/a[^-b]c/
|
|
adc
|
|
|
|
/a[^]b]c/
|
|
adc
|
|
a-c
|
|
\= Expect no match
|
|
a]c
|
|
|
|
/\ba\b/
|
|
a-
|
|
-a
|
|
-a-
|
|
|
|
/\by\b/
|
|
\= Expect no match
|
|
xy
|
|
yz
|
|
xyz
|
|
|
|
/\Ba\B/
|
|
\= Expect no match
|
|
a-
|
|
-a
|
|
-a-
|
|
|
|
/\By\b/
|
|
xy
|
|
|
|
/\by\B/
|
|
yz
|
|
|
|
/\By\B/
|
|
xyz
|
|
|
|
/\w/
|
|
a
|
|
|
|
/\W/
|
|
-
|
|
\= Expect no match
|
|
a
|
|
|
|
/a\sb/
|
|
a b
|
|
|
|
/a\Sb/
|
|
a-b
|
|
\= Expect no match
|
|
a b
|
|
|
|
/\d/
|
|
1
|
|
|
|
/\D/
|
|
-
|
|
\= Expect no match
|
|
1
|
|
|
|
/[\w]/
|
|
a
|
|
|
|
/[\W]/
|
|
-
|
|
\= Expect no match
|
|
a
|
|
|
|
/a[\s]b/
|
|
a b
|
|
|
|
/a[\S]b/
|
|
a-b
|
|
\= Expect no match
|
|
a b
|
|
|
|
/[\d]/
|
|
1
|
|
|
|
/[\D]/
|
|
-
|
|
\= Expect no match
|
|
1
|
|
|
|
/ab|cd/
|
|
abc
|
|
abcd
|
|
|
|
/()ef/
|
|
def
|
|
|
|
/$b/
|
|
|
|
/a\(b/
|
|
a(b
|
|
|
|
/a\(*b/
|
|
ab
|
|
a((b
|
|
|
|
/a\\b/
|
|
a\\b
|
|
|
|
/((a))/
|
|
abc
|
|
|
|
/(a)b(c)/
|
|
abc
|
|
|
|
/a+b+c/
|
|
aabbabc
|
|
|
|
/a{1,}b{1,}c/
|
|
aabbabc
|
|
|
|
/a.+?c/
|
|
abcabc
|
|
|
|
/(a+|b)*/
|
|
ab
|
|
|
|
/(a+|b){0,}/
|
|
ab
|
|
|
|
/(a+|b)+/
|
|
ab
|
|
|
|
/(a+|b){1,}/
|
|
ab
|
|
|
|
/(a+|b)?/
|
|
ab
|
|
|
|
/(a+|b){0,1}/
|
|
ab
|
|
|
|
/[^ab]*/
|
|
cde
|
|
|
|
/abc/
|
|
\= Expect no match
|
|
b
|
|
|
|
/a*/
|
|
\
|
|
|
|
/([abc])*d/
|
|
abbbcd
|
|
|
|
/([abc])*bcd/
|
|
abcd
|
|
|
|
/a|b|c|d|e/
|
|
e
|
|
|
|
/(a|b|c|d|e)f/
|
|
ef
|
|
|
|
/abcd*efg/
|
|
abcdefg
|
|
|
|
/ab*/
|
|
xabyabbbz
|
|
xayabbbz
|
|
|
|
/(ab|cd)e/
|
|
abcde
|
|
|
|
/[abhgefdc]ij/
|
|
hij
|
|
|
|
/^(ab|cd)e/
|
|
|
|
/(abc|)ef/
|
|
abcdef
|
|
|
|
/(a|b)c*d/
|
|
abcd
|
|
|
|
/(ab|ab*)bc/
|
|
abc
|
|
|
|
/a([bc]*)c*/
|
|
abc
|
|
|
|
/a([bc]*)(c*d)/
|
|
abcd
|
|
|
|
/a([bc]+)(c*d)/
|
|
abcd
|
|
|
|
/a([bc]*)(c+d)/
|
|
abcd
|
|
|
|
/a[bcd]*dcdcde/
|
|
adcdcde
|
|
|
|
/a[bcd]+dcdcde/
|
|
\= Expect no match
|
|
abcde
|
|
adcdcde
|
|
|
|
/(ab|a)b*c/
|
|
abc
|
|
|
|
/((a)(b)c)(d)/
|
|
abcd
|
|
|
|
/[a-zA-Z_][a-zA-Z0-9_]*/
|
|
alpha
|
|
|
|
/^a(bc+|b[eh])g|.h$/
|
|
abh
|
|
|
|
/(bc+d$|ef*g.|h?i(j|k))/
|
|
effgz
|
|
ij
|
|
reffgz
|
|
\= Expect no match
|
|
effg
|
|
bcdd
|
|
|
|
/((((((((((a))))))))))/
|
|
a
|
|
|
|
/((((((((((a))))))))))\10/
|
|
aa
|
|
|
|
/(((((((((a)))))))))/
|
|
a
|
|
|
|
/multiple words of text/
|
|
\= Expect no match
|
|
aa
|
|
uh-uh
|
|
|
|
/multiple words/
|
|
multiple words, yeah
|
|
|
|
/(.*)c(.*)/
|
|
abcde
|
|
|
|
/\((.*), (.*)\)/
|
|
(a, b)
|
|
|
|
/[k]/
|
|
|
|
/abcd/
|
|
abcd
|
|
|
|
/a(bc)d/
|
|
abcd
|
|
|
|
/a[-]?c/
|
|
ac
|
|
|
|
/(abc)\1/
|
|
abcabc
|
|
|
|
/([a-c]*)\1/
|
|
abcabc
|
|
|
|
/(a)|\1/
|
|
a
|
|
ab
|
|
\= Expect no match
|
|
x
|
|
|
|
/(([a-c])b*?\2)*/
|
|
ababbbcbc
|
|
|
|
/(([a-c])b*?\2){3}/
|
|
ababbbcbc
|
|
|
|
/((\3|b)\2(a)x)+/
|
|
aaaxabaxbaaxbbax
|
|
|
|
/((\3|b)\2(a)){2,}/
|
|
bbaababbabaaaaabbaaaabba
|
|
|
|
/abc/i
|
|
ABC
|
|
XABCY
|
|
ABABC
|
|
\= Expect no match
|
|
aaxabxbaxbbx
|
|
XBC
|
|
AXC
|
|
ABX
|
|
|
|
/ab*c/i
|
|
ABC
|
|
|
|
/ab*bc/i
|
|
ABC
|
|
ABBC
|
|
|
|
/ab*?bc/i
|
|
ABBBBC
|
|
|
|
/ab{0,}?bc/i
|
|
ABBBBC
|
|
|
|
/ab+?bc/i
|
|
ABBC
|
|
|
|
/ab+bc/i
|
|
\= Expect no match
|
|
ABC
|
|
ABQ
|
|
|
|
/ab{1,}bc/i
|
|
|
|
/ab+bc/i
|
|
ABBBBC
|
|
|
|
/ab{1,}?bc/i
|
|
ABBBBC
|
|
|
|
/ab{1,3}?bc/i
|
|
ABBBBC
|
|
|
|
/ab{3,4}?bc/i
|
|
ABBBBC
|
|
|
|
/ab{4,5}?bc/i
|
|
\= Expect no match
|
|
ABQ
|
|
ABBBBC
|
|
|
|
/ab??bc/i
|
|
ABBC
|
|
ABC
|
|
|
|
/ab{0,1}?bc/i
|
|
ABC
|
|
|
|
/ab??bc/i
|
|
|
|
/ab??c/i
|
|
ABC
|
|
|
|
/ab{0,1}?c/i
|
|
ABC
|
|
|
|
/^abc$/i
|
|
ABC
|
|
\= Expect no match
|
|
ABBBBC
|
|
ABCC
|
|
|
|
/^abc/i
|
|
ABCC
|
|
|
|
/^abc$/i
|
|
|
|
/abc$/i
|
|
AABC
|
|
|
|
/^/i
|
|
ABC
|
|
|
|
/$/i
|
|
ABC
|
|
|
|
/a.c/i
|
|
ABC
|
|
AXC
|
|
|
|
/a.*?c/i
|
|
AXYZC
|
|
|
|
/a.*c/i
|
|
AABC
|
|
\= Expect no match
|
|
AXYZD
|
|
|
|
/a[bc]d/i
|
|
ABD
|
|
|
|
/a[b-d]e/i
|
|
ACE
|
|
\= Expect no match
|
|
ABC
|
|
ABD
|
|
|
|
/a[b-d]/i
|
|
AAC
|
|
|
|
/a[-b]/i
|
|
A-
|
|
|
|
/a[b-]/i
|
|
A-
|
|
|
|
/a]/i
|
|
A]
|
|
|
|
/a[]]b/i
|
|
A]B
|
|
|
|
/a[^bc]d/i
|
|
AED
|
|
|
|
/a[^-b]c/i
|
|
ADC
|
|
\= Expect no match
|
|
ABD
|
|
A-C
|
|
|
|
/a[^]b]c/i
|
|
ADC
|
|
|
|
/ab|cd/i
|
|
ABC
|
|
ABCD
|
|
|
|
/()ef/i
|
|
DEF
|
|
|
|
/$b/i
|
|
\= Expect no match
|
|
A]C
|
|
B
|
|
|
|
/a\(b/i
|
|
A(B
|
|
|
|
/a\(*b/i
|
|
AB
|
|
A((B
|
|
|
|
/a\\b/i
|
|
A\\b
|
|
a\\B
|
|
|
|
/((a))/i
|
|
ABC
|
|
|
|
/(a)b(c)/i
|
|
ABC
|
|
|
|
/a+b+c/i
|
|
AABBABC
|
|
|
|
/a{1,}b{1,}c/i
|
|
AABBABC
|
|
|
|
/a.+?c/i
|
|
ABCABC
|
|
|
|
/a.*?c/i
|
|
ABCABC
|
|
|
|
/a.{0,5}?c/i
|
|
ABCABC
|
|
|
|
/(a+|b)*/i
|
|
AB
|
|
|
|
/(a+|b){0,}/i
|
|
AB
|
|
|
|
/(a+|b)+/i
|
|
AB
|
|
|
|
/(a+|b){1,}/i
|
|
AB
|
|
|
|
/(a+|b)?/i
|
|
AB
|
|
|
|
/(a+|b){0,1}/i
|
|
AB
|
|
|
|
/(a+|b){0,1}?/i
|
|
AB
|
|
|
|
/[^ab]*/i
|
|
CDE
|
|
|
|
/([abc])*d/i
|
|
ABBBCD
|
|
|
|
/([abc])*bcd/i
|
|
ABCD
|
|
|
|
/a|b|c|d|e/i
|
|
E
|
|
|
|
/(a|b|c|d|e)f/i
|
|
EF
|
|
|
|
/abcd*efg/i
|
|
ABCDEFG
|
|
|
|
/ab*/i
|
|
XABYABBBZ
|
|
XAYABBBZ
|
|
|
|
/(ab|cd)e/i
|
|
ABCDE
|
|
|
|
/[abhgefdc]ij/i
|
|
HIJ
|
|
|
|
/^(ab|cd)e/i
|
|
\= Expect no match
|
|
ABCDE
|
|
|
|
/(abc|)ef/i
|
|
ABCDEF
|
|
|
|
/(a|b)c*d/i
|
|
ABCD
|
|
|
|
/(ab|ab*)bc/i
|
|
ABC
|
|
|
|
/a([bc]*)c*/i
|
|
ABC
|
|
|
|
/a([bc]*)(c*d)/i
|
|
ABCD
|
|
|
|
/a([bc]+)(c*d)/i
|
|
ABCD
|
|
|
|
/a([bc]*)(c+d)/i
|
|
ABCD
|
|
|
|
/a[bcd]*dcdcde/i
|
|
ADCDCDE
|
|
|
|
/a[bcd]+dcdcde/i
|
|
|
|
/(ab|a)b*c/i
|
|
ABC
|
|
|
|
/((a)(b)c)(d)/i
|
|
ABCD
|
|
|
|
/[a-zA-Z_][a-zA-Z0-9_]*/i
|
|
ALPHA
|
|
|
|
/^a(bc+|b[eh])g|.h$/i
|
|
ABH
|
|
|
|
/(bc+d$|ef*g.|h?i(j|k))/i
|
|
EFFGZ
|
|
IJ
|
|
REFFGZ
|
|
\= Expect no match
|
|
ADCDCDE
|
|
EFFG
|
|
BCDD
|
|
|
|
/((((((((((a))))))))))/i
|
|
A
|
|
|
|
/((((((((((a))))))))))\10/i
|
|
AA
|
|
|
|
/(((((((((a)))))))))/i
|
|
A
|
|
|
|
/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
|
|
A
|
|
|
|
/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
|
|
C
|
|
|
|
/multiple words of text/i
|
|
\= Expect no match
|
|
AA
|
|
UH-UH
|
|
|
|
/multiple words/i
|
|
MULTIPLE WORDS, YEAH
|
|
|
|
/(.*)c(.*)/i
|
|
ABCDE
|
|
|
|
/\((.*), (.*)\)/i
|
|
(A, B)
|
|
|
|
/[k]/i
|
|
|
|
/abcd/i
|
|
ABCD
|
|
|
|
/a(bc)d/i
|
|
ABCD
|
|
|
|
/a[-]?c/i
|
|
AC
|
|
|
|
/(abc)\1/i
|
|
ABCABC
|
|
|
|
/([a-c]*)\1/i
|
|
ABCABC
|
|
|
|
/a(?!b)./
|
|
abad
|
|
|
|
/a(?=d)./
|
|
abad
|
|
|
|
/a(?=c|d)./
|
|
abad
|
|
|
|
/a(?:b|c|d)(.)/
|
|
ace
|
|
|
|
/a(?:b|c|d)*(.)/
|
|
ace
|
|
|
|
/a(?:b|c|d)+?(.)/
|
|
ace
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d)+(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d){2}(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d){4,5}(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d){4,5}?(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d){6,7}(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d){6,7}?(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d){5,6}(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d){5,6}?(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d){5,7}(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|c|d){5,7}?(.)/
|
|
acdbcdbe
|
|
|
|
/a(?:b|(c|e){1,2}?|d)+?(.)/
|
|
ace
|
|
|
|
/^(.+)?B/
|
|
AB
|
|
|
|
/^([^a-z])|(\^)$/
|
|
.
|
|
|
|
/^[<>]&/
|
|
<&OUT
|
|
|
|
/^(a\1?){4}$/
|
|
aaaaaaaaaa
|
|
\= Expect no match
|
|
AB
|
|
aaaaaaaaa
|
|
aaaaaaaaaaa
|
|
|
|
/^(a(?(1)\1)){4}$/
|
|
aaaaaaaaaa
|
|
\= Expect no match
|
|
aaaaaaaaa
|
|
aaaaaaaaaaa
|
|
|
|
/(?<=a)b/
|
|
ab
|
|
\= Expect no match
|
|
cb
|
|
b
|
|
|
|
/(?<!c)b/
|
|
ab
|
|
b
|
|
b
|
|
|
|
/(?:..)*a/
|
|
aba
|
|
|
|
/(?:..)*?a/
|
|
aba
|
|
|
|
/^(?:b|a(?=(.)))*\1/
|
|
abc
|
|
|
|
/^(){3,5}/
|
|
abc
|
|
|
|
/^(a+)*ax/
|
|
aax
|
|
|
|
/^((a|b)+)*ax/
|
|
aax
|
|
|
|
/^((a|bc)+)*ax/
|
|
aax
|
|
|
|
/(a|x)*ab/
|
|
cab
|
|
|
|
/(a)*ab/
|
|
cab
|
|
|
|
/(?:(?i)a)b/
|
|
ab
|
|
|
|
/((?i)a)b/
|
|
ab
|
|
|
|
/(?:(?i)a)b/
|
|
Ab
|
|
|
|
/((?i)a)b/
|
|
Ab
|
|
|
|
/(?:(?i)a)b/
|
|
\= Expect no match
|
|
cb
|
|
aB
|
|
|
|
/((?i)a)b/
|
|
|
|
/(?i:a)b/
|
|
ab
|
|
|
|
/((?i:a))b/
|
|
ab
|
|
|
|
/(?i:a)b/
|
|
Ab
|
|
|
|
/((?i:a))b/
|
|
Ab
|
|
|
|
/(?i:a)b/
|
|
\= Expect no match
|
|
aB
|
|
aB
|
|
|
|
/((?i:a))b/
|
|
|
|
/(?:(?-i)a)b/i
|
|
ab
|
|
|
|
/((?-i)a)b/i
|
|
ab
|
|
|
|
/(?:(?-i)a)b/i
|
|
aB
|
|
|
|
/((?-i)a)b/i
|
|
aB
|
|
|
|
/(?:(?-i)a)b/i
|
|
aB
|
|
\= Expect no match
|
|
Ab
|
|
AB
|
|
|
|
/(?-i:a)b/i
|
|
ab
|
|
|
|
/((?-i:a))b/i
|
|
ab
|
|
|
|
/(?-i:a)b/i
|
|
aB
|
|
|
|
/((?-i:a))b/i
|
|
aB
|
|
|
|
/(?-i:a)b/i
|
|
\= Expect no match
|
|
AB
|
|
Ab
|
|
|
|
/((?-i:a))b/i
|
|
|
|
/(?-i:a)b/i
|
|
aB
|
|
|
|
/((?-i:a))b/i
|
|
aB
|
|
|
|
/(?-i:a)b/i
|
|
\= Expect no match
|
|
Ab
|
|
AB
|
|
|
|
/((?-i:a))b/i
|
|
|
|
/((?-i:a.))b/i
|
|
\= Expect no match
|
|
AB
|
|
a\nB
|
|
|
|
/((?s-i:a.))b/i
|
|
a\nB
|
|
|
|
/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
|
|
cabbbb
|
|
|
|
/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
|
|
caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
|
|
|
/(ab)\d\1/i
|
|
Ab4ab
|
|
ab4Ab
|
|
|
|
/foo\w*\d{4}baz/
|
|
foobar1234baz
|
|
|
|
/x(~~)*(?:(?:F)?)?/
|
|
x~~
|
|
|
|
/^a(?#xxx){3}c/
|
|
aaac
|
|
|
|
/^a (?#xxx) (?#yyy) {3}c/x
|
|
aaac
|
|
|
|
/(?<![cd])b/
|
|
\= Expect no match
|
|
B\nB
|
|
dbcb
|
|
|
|
/(?<![cd])[ab]/
|
|
dbaacb
|
|
|
|
/(?<!(c|d))b/
|
|
|
|
/(?<!(c|d))[ab]/
|
|
dbaacb
|
|
|
|
/(?<!cd)[ab]/
|
|
cdaccb
|
|
|
|
/^(?:a?b?)*$/
|
|
\
|
|
a
|
|
ab
|
|
aaa
|
|
\= Expect no match
|
|
dbcb
|
|
a--
|
|
aa--
|
|
|
|
/((?s)^a(.))((?m)^b$)/
|
|
a\nb\nc\n
|
|
|
|
/((?m)^b$)/
|
|
a\nb\nc\n
|
|
|
|
/(?m)^b/
|
|
a\nb\n
|
|
|
|
/(?m)^(b)/
|
|
a\nb\n
|
|
|
|
/((?m)^b)/
|
|
a\nb\n
|
|
|
|
/\n((?m)^b)/
|
|
a\nb\n
|
|
|
|
/((?s).)c(?!.)/
|
|
a\nb\nc\n
|
|
a\nb\nc\n
|
|
|
|
/((?s)b.)c(?!.)/
|
|
a\nb\nc\n
|
|
a\nb\nc\n
|
|
|
|
/^b/
|
|
|
|
/()^b/
|
|
\= Expect no match
|
|
a\nb\nc\n
|
|
a\nb\nc\n
|
|
|
|
/((?m)^b)/
|
|
a\nb\nc\n
|
|
|
|
/(x)?(?(1)a|b)/
|
|
\= Expect no match
|
|
a
|
|
a
|
|
|
|
/(x)?(?(1)b|a)/
|
|
a
|
|
|
|
/()?(?(1)b|a)/
|
|
a
|
|
|
|
/()(?(1)b|a)/
|
|
|
|
/()?(?(1)a|b)/
|
|
a
|
|
|
|
/^(\()?blah(?(1)(\)))$/
|
|
(blah)
|
|
blah
|
|
\= Expect no match
|
|
a
|
|
blah)
|
|
(blah
|
|
|
|
/^(\(+)?blah(?(1)(\)))$/
|
|
(blah)
|
|
blah
|
|
\= Expect no match
|
|
blah)
|
|
(blah
|
|
|
|
/(?(?!a)a|b)/
|
|
|
|
/(?(?!a)b|a)/
|
|
a
|
|
|
|
/(?(?=a)b|a)/
|
|
\= Expect no match
|
|
a
|
|
a
|
|
|
|
/(?(?=a)a|b)/
|
|
a
|
|
|
|
/(?=(a+?))(\1ab)/
|
|
aaab
|
|
|
|
/^(?=(a+?))\1ab/
|
|
|
|
/(\w+:)+/
|
|
one:
|
|
|
|
/$(?<=^(a))/
|
|
a
|
|
|
|
/(?=(a+?))(\1ab)/
|
|
aaab
|
|
|
|
/^(?=(a+?))\1ab/
|
|
\= Expect no match
|
|
aaab
|
|
aaab
|
|
|
|
/([\w:]+::)?(\w+)$/
|
|
abcd
|
|
xy:z:::abcd
|
|
|
|
/^[^bcd]*(c+)/
|
|
aexycd
|
|
|
|
/(a*)b+/
|
|
caab
|
|
|
|
/([\w:]+::)?(\w+)$/
|
|
abcd
|
|
xy:z:::abcd
|
|
\= Expect no match
|
|
abcd:
|
|
abcd:
|
|
|
|
/^[^bcd]*(c+)/
|
|
aexycd
|
|
|
|
/(>a+)ab/
|
|
|
|
/(?>a+)b/
|
|
aaab
|
|
|
|
/([[:]+)/
|
|
a:[b]:
|
|
|
|
/([[=]+)/
|
|
a=[b]=
|
|
|
|
/([[.]+)/
|
|
a.[b].
|
|
|
|
/((?>a+)b)/
|
|
aaab
|
|
|
|
/(?>(a+))b/
|
|
aaab
|
|
|
|
/((?>[^()]+)|\([^()]*\))+/
|
|
((abc(ade)ufh()()x
|
|
|
|
/a\Z/
|
|
\= Expect no match
|
|
aaab
|
|
a\nb\n
|
|
|
|
/b\Z/
|
|
a\nb\n
|
|
|
|
/b\z/
|
|
|
|
/b\Z/
|
|
a\nb
|
|
|
|
/b\z/
|
|
a\nb
|
|
|
|
/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
|
|
a
|
|
abc
|
|
a-b
|
|
0-9
|
|
a.b
|
|
5.6.7
|
|
the.quick.brown.fox
|
|
a100.b200.300c
|
|
12-ab.1245
|
|
\= Expect no match
|
|
\
|
|
.a
|
|
-a
|
|
a-
|
|
a.
|
|
a_b
|
|
a.-
|
|
a..
|
|
ab..bc
|
|
the.quick.brown.fox-
|
|
the.quick.brown.fox.
|
|
the.quick.brown.fox_
|
|
the.quick.brown.fox+
|
|
|
|
/(?>.*)(?<=(abcd|wxyz))/
|
|
alphabetabcd
|
|
endingwxyz
|
|
\= Expect no match
|
|
a rather long string that doesn't end with one of them
|
|
|
|
/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
|
|
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
|
|
|
|
/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
|
|
|
|
/(?<=\d{3}(?!999))foo/
|
|
999foo
|
|
123999foo
|
|
\= Expect no match
|
|
123abcfoo
|
|
|
|
/(?<=(?!...999)\d{3})foo/
|
|
999foo
|
|
123999foo
|
|
\= Expect no match
|
|
123abcfoo
|
|
|
|
/(?<=\d{3}(?!999)...)foo/
|
|
123abcfoo
|
|
123456foo
|
|
\= Expect no match
|
|
123999foo
|
|
|
|
/(?<=\d{3}...)(?<!999)foo/
|
|
123abcfoo
|
|
123456foo
|
|
\= Expect no match
|
|
123999foo
|
|
|
|
/<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
|
|
<a href=\"abcd xyz pqr\" cats
|
|
<a href=\'abcd xyz pqr\' cats
|
|
|
|
/<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
|
|
<a href=\"abcd xyz pqr\" cats
|
|
<a href = \'abcd xyz pqr\' cats
|
|
|
|
/<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
|
|
<a href=\"abcd xyz pqr\" cats
|
|
<a href = \'abcd xyz pqr\' cats
|
|
|
|
/(Z()|A)*/
|
|
ZABCDEFG
|
|
|
|
/(Z(())|A)*/
|
|
ZABCDEFG
|
|
|
|
/((?>Z)+|A)*/
|
|
ZABCDEFG
|
|
|
|
/((?>)+|A)*/
|
|
ZABCDEFG
|
|
|
|
/a*/g
|
|
abbab
|
|
|
|
/[[:space:]]+/
|
|
> \x09\x0a\x0c\x0d\x0b<
|
|
|
|
/[[:blank:]]+/
|
|
> \x09\x0a\x0c\x0d\x0b<
|
|
|
|
/[\s]+/
|
|
> \x09\x0a\x0c\x0d\x0b<
|
|
|
|
/\s+/
|
|
> \x09\x0a\x0c\x0d\x0b<
|
|
|
|
/ab/x
|
|
ab
|
|
|
|
/(?!\A)x/m
|
|
a\nxb\n
|
|
|
|
/(?!^)x/m
|
|
\= Expect no match
|
|
a\nxb\n
|
|
|
|
/abc\Qabc\Eabc/
|
|
abcabcabc
|
|
|
|
/abc\Q(*+|\Eabc/
|
|
abc(*+|abc
|
|
|
|
/ abc\Q abc\Eabc/x
|
|
abc abcabc
|
|
\= Expect no match
|
|
abcabcabc
|
|
|
|
/abc#comment
|
|
\Q#not comment
|
|
literal\E/x
|
|
abc#not comment\n literal
|
|
|
|
/abc#comment
|
|
\Q#not comment
|
|
literal/x
|
|
abc#not comment\n literal
|
|
|
|
/abc#comment
|
|
\Q#not comment
|
|
literal\E #more comment
|
|
/x
|
|
abc#not comment\n literal
|
|
|
|
/abc#comment
|
|
\Q#not comment
|
|
literal\E #more comment/x
|
|
abc#not comment\n literal
|
|
|
|
/\Qabc\$xyz\E/
|
|
abc\\\$xyz
|
|
|
|
/\Qabc\E\$\Qxyz\E/
|
|
abc\$xyz
|
|
|
|
/\Gabc/
|
|
abc
|
|
\= Expect no match
|
|
xyzabc
|
|
|
|
/\Gabc./g
|
|
abc1abc2xyzabc3
|
|
|
|
/abc./g
|
|
abc1abc2xyzabc3
|
|
|
|
/a(?x: b c )d/
|
|
XabcdY
|
|
\= Expect no match
|
|
Xa b c d Y
|
|
|
|
/((?x)x y z | a b c)/
|
|
XabcY
|
|
AxyzB
|
|
|
|
/(?i)AB(?-i)C/
|
|
XabCY
|
|
\= Expect no match
|
|
XabcY
|
|
|
|
/((?i)AB(?-i)C|D)E/
|
|
abCE
|
|
DE
|
|
\= Expect no match
|
|
abcE
|
|
abCe
|
|
dE
|
|
De
|
|
|
|
/(.*)\d+\1/
|
|
abc123abc
|
|
abc123bc
|
|
|
|
/(.*)\d+\1/s
|
|
abc123abc
|
|
abc123bc
|
|
|
|
/((.*))\d+\1/
|
|
abc123abc
|
|
abc123bc
|
|
|
|
# This tests for an IPv6 address in the form where it can have up to
|
|
# eight components, one and only one of which is empty. This must be
|
|
# an internal component.
|
|
|
|
/^(?!:) # colon disallowed at start
|
|
(?: # start of item
|
|
(?: [0-9a-f]{1,4} | # 1-4 hex digits or
|
|
(?(1)0 | () ) ) # if null previously matched, fail; else null
|
|
: # followed by colon
|
|
){1,7} # end item; 1-7 of them required
|
|
[0-9a-f]{1,4} $ # final hex number at end of string
|
|
(?(1)|.) # check that there was an empty component
|
|
/ix
|
|
a123::a123
|
|
a123:b342::abcd
|
|
a123:b342::324e:abcd
|
|
a123:ddde:b342::324e:abcd
|
|
a123:ddde:b342::324e:dcba:abcd
|
|
a123:ddde:9999:b342::324e:dcba:abcd
|
|
\= Expect no match
|
|
1:2:3:4:5:6:7:8
|
|
a123:bce:ddde:9999:b342::324e:dcba:abcd
|
|
a123::9999:b342::324e:dcba:abcd
|
|
abcde:2:3:4:5:6:7:8
|
|
::1
|
|
abcd:fee0:123::
|
|
:1
|
|
1:
|
|
|
|
/[z\Qa-d]\E]/
|
|
z
|
|
a
|
|
-
|
|
d
|
|
]
|
|
\= Expect no match
|
|
b
|
|
|
|
/(a+)*b/
|
|
\= Expect no match
|
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|
|
|
/(?i)reg(?:ul(?:[aä]|ae)r|ex)/
|
|
REGular
|
|
regulaer
|
|
Regex
|
|
regulär
|
|
|
|
/Åæåä[à-ÿÀ-ß]+/
|
|
Åæåäà
|
|
Åæåäÿ
|
|
ÅæåäÀ
|
|
Åæåäß
|
|
|
|
/(?<=Z)X./
|
|
\x84XAZXB
|
|
|
|
/ab cd (?x) de fg/
|
|
ab cd defg
|
|
|
|
/ab cd(?x) de fg/
|
|
ab cddefg
|
|
\= Expect no match
|
|
abcddefg
|
|
|
|
/(?<![^f]oo)(bar)/
|
|
foobarX
|
|
\= Expect no match
|
|
boobarX
|
|
|
|
/(?<![^f])X/
|
|
offX
|
|
\= Expect no match
|
|
onyX
|
|
|
|
/(?<=[^f])X/
|
|
onyX
|
|
\= Expect no match
|
|
offX
|
|
|
|
/^/gm
|
|
a\nb\nc\n
|
|
\
|
|
|
|
/(?<=C\n)^/gm
|
|
A\nC\nC\n
|
|
|
|
/(?:(?(1)a|b)(X))+/
|
|
bXaX
|
|
|
|
/(?:(?(1)\1a|b)(X|Y))+/
|
|
bXXaYYaY
|
|
bXYaXXaX
|
|
|
|
/()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
|
|
bXXaYYaY
|
|
|
|
/[[,abc,]+]/
|
|
abc]
|
|
a,b]
|
|
[a,b,c]
|
|
|
|
/(?-x: )/x
|
|
A\x20B
|
|
|
|
/(?x)(?-x: \s*#\s*)/
|
|
A # B
|
|
\= Expect no match
|
|
#
|
|
A s#s B
|
|
|
|
/(?x-is)(?:(?-ixs) \s*#\s*) include/
|
|
A #include
|
|
\= Expect no match
|
|
A#include
|
|
A #Include
|
|
|
|
/a*b*\w/
|
|
aaabbbb
|
|
aaaa
|
|
a
|
|
|
|
/a*b?\w/
|
|
aaabbbb
|
|
aaaa
|
|
a
|
|
|
|
/a*b{0,4}\w/
|
|
aaabbbb
|
|
aaaa
|
|
a
|
|
|
|
/a*b{0,}\w/
|
|
aaabbbb
|
|
aaaa
|
|
a
|
|
|
|
/a*\d*\w/
|
|
0a
|
|
a
|
|
|
|
/a*b *\w/x
|
|
a
|
|
|
|
/a*b#comment
|
|
*\w/x
|
|
a
|
|
|
|
/a* b *\w/x
|
|
a
|
|
|
|
/^\w+=.*(\\\n.*)*/
|
|
abc=xyz\\\npqr
|
|
|
|
/(?=(\w+))\1:/
|
|
abcd:
|
|
|
|
/^(?=(\w+))\1:/
|
|
abcd:
|
|
|
|
/^\Eabc/
|
|
abc
|
|
|
|
/^[\Eabc]/
|
|
a
|
|
\= Expect no match
|
|
E
|
|
|
|
/^[a-\Ec]/
|
|
b
|
|
\= Expect no match
|
|
-
|
|
E
|
|
|
|
/^[a\E\E-\Ec]/
|
|
b
|
|
\= Expect no match
|
|
-
|
|
E
|
|
|
|
/^[\E\Qa\E-\Qz\E]+/
|
|
b
|
|
\= Expect no match
|
|
-
|
|
|
|
/^[a\Q]bc\E]/
|
|
a
|
|
]
|
|
c
|
|
|
|
/^[a-\Q\E]/
|
|
a
|
|
-
|
|
|
|
/^(a()*)*/
|
|
aaaa
|
|
|
|
/^(?:a(?:(?:))*)*/
|
|
aaaa
|
|
|
|
/^(a()+)+/
|
|
aaaa
|
|
|
|
/^(?:a(?:(?:))+)+/
|
|
aaaa
|
|
|
|
/(a){0,3}(?(1)b|(c|))*D/
|
|
abbD
|
|
ccccD
|
|
D
|
|
|
|
/(a|)*\d/
|
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
|
|
\= Expect no match
|
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|
|
|
/(?>a|)*\d/
|
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
|
|
\= Expect no match
|
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|
|
|
/(?:a|)*\d/
|
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
|
|
\= Expect no match
|
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|
|
|
/\Z/g
|
|
abc\n
|
|
|
|
/^(?s)(?>.*)(?<!\n)/
|
|
abc
|
|
\= Expect no match
|
|
abc\n
|
|
|
|
/^(?![^\n]*\n\z)/
|
|
abc
|
|
\= Expect no match
|
|
abc\n
|
|
|
|
/\z(?<!\n)/
|
|
abc
|
|
\= Expect no match
|
|
abc\n
|
|
|
|
/(.*(.)?)*/
|
|
abcd
|
|
|
|
/( (A | (?(1)0|) )* )/x
|
|
abcd
|
|
|
|
/( ( (?(1)0|) )* )/x
|
|
abcd
|
|
|
|
/( (?(1)0|)* )/x
|
|
abcd
|
|
|
|
/[[:abcd:xyz]]/
|
|
a]
|
|
:]
|
|
|
|
/[abc[:x\]pqr]/
|
|
a
|
|
[
|
|
:
|
|
]
|
|
p
|
|
|
|
/.*[op][xyz]/
|
|
\= Expect no match
|
|
fooabcfoo
|
|
|
|
/(?(?=.*b)b|^)/
|
|
adc
|
|
abc
|
|
|
|
/(?(?=^.*b)b|^)/
|
|
adc
|
|
\= Expect no match
|
|
abc
|
|
|
|
/(?(?=.*b)b|^)*/
|
|
adc
|
|
abc
|
|
|
|
/(?(?=.*b)b|^)+/
|
|
adc
|
|
abc
|
|
|
|
/(?(?=b).*b|^d)/
|
|
abc
|
|
|
|
/(?(?=.*b).*b|^d)/
|
|
abc
|
|
|
|
/^%((?(?=[a])[^%])|b)*%$/
|
|
%ab%
|
|
|
|
/(?i)a(?-i)b|c/
|
|
XabX
|
|
XAbX
|
|
CcC
|
|
\= Expect no match
|
|
XABX
|
|
|
|
/[\x00-\xff\s]+/
|
|
\x0a\x0b\x0c\x0d
|
|
|
|
/(abc)\1/i
|
|
\= Expect no match
|
|
abc
|
|
|
|
/(abc)\1/
|
|
\= Expect no match
|
|
abc
|
|
|
|
/[^a]*/i
|
|
12abc
|
|
12ABC
|
|
|
|
/[^a]*+/i
|
|
12abc
|
|
12ABC
|
|
|
|
/[^a]*?X/i
|
|
\= Expect no match
|
|
12abc
|
|
12ABC
|
|
|
|
/[^a]+?X/i
|
|
\= Expect no match
|
|
12abc
|
|
12ABC
|
|
|
|
/[^a]?X/i
|
|
12aXbcX
|
|
12AXBCX
|
|
BCX
|
|
|
|
/[^a]??X/i
|
|
12aXbcX
|
|
12AXBCX
|
|
BCX
|
|
|
|
/[^a]?+X/i
|
|
12aXbcX
|
|
12AXBCX
|
|
BCX
|
|
|
|
/[^a]{2,3}/i
|
|
abcdef
|
|
ABCDEF
|
|
|
|
/[^a]{2,3}?/i
|
|
abcdef
|
|
ABCDEF
|
|
|
|
/[^a]{2,3}+/i
|
|
abcdef
|
|
ABCDEF
|
|
|
|
/((a|)+)+Z/
|
|
Z
|
|
|
|
/(a)b|(a)c/
|
|
ac
|
|
|
|
/(?>(a))b|(a)c/
|
|
ac
|
|
|
|
/(?=(a))ab|(a)c/
|
|
ac
|
|
|
|
/((?>(a))b|(a)c)/
|
|
ac
|
|
|
|
/((?>(a))b|(a)c)++/
|
|
ac
|
|
|
|
/(?:(?>(a))b|(a)c)++/
|
|
ac
|
|
|
|
/(?=(?>(a))b|(a)c)(..)/
|
|
ac
|
|
|
|
/(?>(?>(a))b|(a)c)/
|
|
ac
|
|
|
|
/(?:(?>([ab])))+a=/aftertext
|
|
=ba=
|
|
|
|
/(?>([ab]))+a=/aftertext
|
|
=ba=
|
|
|
|
/((?>(a+)b)+(aabab))/
|
|
aaaabaaabaabab
|
|
|
|
/(?>a+|ab)+?c/
|
|
\= Expect no match
|
|
aabc
|
|
|
|
/(?>a+|ab)+c/
|
|
\= Expect no match
|
|
aabc
|
|
|
|
/(?:a+|ab)+c/
|
|
aabc
|
|
|
|
/(?(?=(a))a)/
|
|
a
|
|
|
|
/(?(?=(a))a)(b)/
|
|
ab
|
|
|
|
/^(?:a|ab)++c/
|
|
\= Expect no match
|
|
aaaabc
|
|
|
|
/^(?>a|ab)++c/
|
|
\= Expect no match
|
|
aaaabc
|
|
|
|
/^(?:a|ab)+c/
|
|
aaaabc
|
|
|
|
/(?=abc){3}abc/aftertext
|
|
abcabcabc
|
|
\= Expect no match
|
|
xyz
|
|
|
|
/(?=abc)+abc/aftertext
|
|
abcabcabc
|
|
\= Expect no match
|
|
xyz
|
|
|
|
/(?=abc)++abc/aftertext
|
|
abcabcabc
|
|
\= Expect no match
|
|
xyz
|
|
|
|
/(?=abc){0}xyz/
|
|
xyz
|
|
|
|
/(?=abc){1}xyz/
|
|
\= Expect no match
|
|
xyz
|
|
|
|
/(?=(a))?./
|
|
ab
|
|
bc
|
|
|
|
/(?=(a))??./
|
|
ab
|
|
bc
|
|
|
|
/^(?=(?1))?[az]([abc])d/
|
|
abd
|
|
zcdxx
|
|
|
|
/^(?!a){0}\w+/
|
|
aaaaa
|
|
|
|
/(?<=(abc))?xyz/
|
|
abcxyz
|
|
pqrxyz
|
|
|
|
/^[\g<a>]+/
|
|
ggg<<<aaa>>>
|
|
\= Expect no match
|
|
\\ga
|
|
|
|
/^[\ga]+/
|
|
gggagagaxyz
|
|
|
|
/^[:a[:digit:]]+/
|
|
aaaa444:::Z
|
|
|
|
/^[:a[:digit:]:b]+/
|
|
aaaa444:::bbbZ
|
|
|
|
/[:a]xxx[b:]/
|
|
:xxx:
|
|
|
|
/(?<=a{2})b/i
|
|
xaabc
|
|
\= Expect no match
|
|
xabc
|
|
|
|
/(?<!a{2})b/i
|
|
xabc
|
|
\= Expect no match
|
|
xaabc
|
|
|
|
/(?<=a\h)c/
|
|
xa c
|
|
|
|
/(?<=[^a]{2})b/
|
|
axxbc
|
|
aAAbc
|
|
\= Expect no match
|
|
xaabc
|
|
|
|
/(?<=[^a]{2})b/i
|
|
axxbc
|
|
\= Expect no match
|
|
aAAbc
|
|
xaabc
|
|
|
|
/(?<=a\H)c/
|
|
abc
|
|
|
|
/(?<=a\V)c/
|
|
abc
|
|
|
|
/(?<=a\v)c/
|
|
a\nc
|
|
|
|
/(?(?=c)c|d)++Y/
|
|
XcccddYX
|
|
|
|
/(?(?=c)c|d)*+Y/
|
|
XcccddYX
|
|
|
|
/^(a{2,3}){2,}+a/
|
|
aaaaaaa
|
|
\= Expect no match
|
|
aaaaaa
|
|
aaaaaaaaa
|
|
|
|
/^(a{2,3})++a/
|
|
\= Expect no match
|
|
aaaaaa
|
|
|
|
/^(a{2,3})*+a/
|
|
\= Expect no match
|
|
aaaaaa
|
|
|
|
/\H\h\V\v/
|
|
X X\x0a
|
|
X\x09X\x0b
|
|
\= Expect no match
|
|
\xa0 X\x0a
|
|
|
|
/\H*\h+\V?\v{3,4}/
|
|
\x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
|
|
\x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
|
|
\x09\x20\xa0\x0a\x0b\x0c
|
|
\= Expect no match
|
|
\x09\x20\xa0\x0a\x0b
|
|
|
|
/\H{3,4}/
|
|
XY ABCDE
|
|
XY PQR ST
|
|
|
|
/.\h{3,4}./
|
|
XY AB PQRS
|
|
|
|
/\h*X\h?\H+Y\H?Z/
|
|
>XNNNYZ
|
|
> X NYQZ
|
|
\= Expect no match
|
|
>XYZ
|
|
> X NY Z
|
|
|
|
/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
|
|
>XY\x0aZ\x0aA\x0bNN\x0c
|
|
>\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
|
|
|
|
/(foo)\Kbar/
|
|
foobar
|
|
|
|
/(foo)(\Kbar|baz)/
|
|
foobar
|
|
foobaz
|
|
|
|
/(foo\Kbar)baz/
|
|
foobarbaz
|
|
|
|
/abc\K|def\K/g,aftertext
|
|
Xabcdefghi
|
|
|
|
/ab\Kc|de\Kf/g,aftertext
|
|
Xabcdefghi
|
|
|
|
/(?=C)/g,aftertext
|
|
ABCDECBA
|
|
|
|
/^abc\K/aftertext
|
|
abcdef
|
|
\= Expect no match
|
|
defabcxyz
|
|
|
|
/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-2}Z/
|
|
ababababbbabZXXXX
|
|
|
|
/(?<A>tom|bon)-\g{A}/
|
|
tom-tom
|
|
bon-bon
|
|
|
|
/(^(a|b\g{-1}))/
|
|
\= Expect no match
|
|
bacxxx
|
|
|
|
/(?|(abc)|(xyz))\1/
|
|
abcabc
|
|
xyzxyz
|
|
\= Expect no match
|
|
abcxyz
|
|
xyzabc
|
|
|
|
/(?|(abc)|(xyz))(?1)/
|
|
abcabc
|
|
xyzabc
|
|
\= Expect no match
|
|
xyzxyz
|
|
|
|
/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
|
|
XYabcdY
|
|
|
|
/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
|
|
XYabcdY
|
|
|
|
/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
|
|
XYabcdY
|
|
|
|
/(?'abc'\w+):\k<abc>{2}/
|
|
a:aaxyz
|
|
ab:ababxyz
|
|
\= Expect no match
|
|
a:axyz
|
|
ab:abxyz
|
|
|
|
/(?'abc'\w+):\g{abc}{2}/
|
|
a:aaxyz
|
|
ab:ababxyz
|
|
\= Expect no match
|
|
a:axyz
|
|
ab:abxyz
|
|
|
|
/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
|
|
abd
|
|
ce
|
|
|
|
/^(a.)\g-1Z/
|
|
aXaXZ
|
|
|
|
/^(a.)\g{-1}Z/
|
|
aXaXZ
|
|
|
|
/^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
|
|
abcd
|
|
|
|
/(?<all>(?:(?:a(?&all))|(b))(c?))/
|
|
aabc
|
|
|
|
/(a(b)|(c))(?1)/
|
|
abc
|
|
cab
|
|
|
|
/(?1)(a(b)|(c))/
|
|
abc
|
|
cab
|
|
|
|
/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
|
|
(?(DEFINE)
|
|
(?<NAME_PAT>[a-z]+)
|
|
(?<ADDRESS_PAT>\d+)
|
|
)/x
|
|
metcalfe 33
|
|
|
|
/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
|
|
1.2.3.4
|
|
131.111.10.206
|
|
10.0.0.0
|
|
\= Expect no match
|
|
10.6
|
|
455.3.4.5
|
|
|
|
/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
|
|
1.2.3.4
|
|
131.111.10.206
|
|
10.0.0.0
|
|
\= Expect no match
|
|
10.6
|
|
455.3.4.5
|
|
|
|
/^(\w++|\s++)*$/
|
|
now is the time for all good men to come to the aid of the party
|
|
\= Expect no match
|
|
this is not a line with only words and spaces!
|
|
|
|
/(\d++)(\w)/
|
|
12345a
|
|
\= Expect no match
|
|
12345+
|
|
|
|
/a++b/
|
|
aaab
|
|
|
|
/(a++b)/
|
|
aaab
|
|
|
|
/(a++)b/
|
|
aaab
|
|
|
|
/([^()]++|\([^()]*\))+/
|
|
((abc(ade)ufh()()x
|
|
|
|
/\(([^()]++|\([^()]+\))+\)/
|
|
(abc)
|
|
(abc(def)xyz)
|
|
\= Expect no match
|
|
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|
|
|
/^([^()]|\((?1)*\))*$/
|
|
abc
|
|
a(b)c
|
|
a(b(c))d
|
|
\= Expect no match)
|
|
a(b(c)d
|
|
|
|
/^>abc>([^()]|\((?1)*\))*<xyz<$/
|
|
>abc>123<xyz<
|
|
>abc>1(2)3<xyz<
|
|
>abc>(1(2)3)<xyz<
|
|
|
|
/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
|
|
1221
|
|
Satanoscillatemymetallicsonatas
|
|
AmanaplanacanalPanama
|
|
AblewasIereIsawElba
|
|
\= Expect no match
|
|
Thequickbrownfox
|
|
|
|
/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
|
|
12
|
|
(((2+2)*-3)-7)
|
|
-12
|
|
\= Expect no match
|
|
((2+2)*-3)-7)
|
|
|
|
/^(x(y|(?1){2})z)/
|
|
xyz
|
|
xxyzxyzz
|
|
\= Expect no match
|
|
xxyzz
|
|
xxyzxyzxyzz
|
|
|
|
/((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
|
|
<>
|
|
<abcd>
|
|
<abc <123> hij>
|
|
<abc <def> hij>
|
|
<abc<>def>
|
|
<abc<>
|
|
\= Expect no match
|
|
<abc
|
|
|
|
/^a+(*FAIL)/
|
|
\= Expect no match
|
|
aaaaaa
|
|
|
|
/a+b?c+(*FAIL)/
|
|
\= Expect no match
|
|
aaabccc
|
|
|
|
/a+b?(*PRUNE)c+(*FAIL)/
|
|
\= Expect no match
|
|
aaabccc
|
|
|
|
/a+b?(*COMMIT)c+(*FAIL)/
|
|
\= Expect no match
|
|
aaabccc
|
|
|
|
/a+b?(*SKIP)c+(*FAIL)/
|
|
\= Expect no match
|
|
aaabcccaaabccc
|
|
|
|
/^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
|
|
aaaxxxxxx
|
|
aaa++++++
|
|
bbbxxxxx
|
|
bbb+++++
|
|
cccxxxx
|
|
ccc++++
|
|
dddddddd
|
|
|
|
/^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
|
|
aaaxxxxxx
|
|
aaa++++++
|
|
bbbxxxxx
|
|
bbb+++++
|
|
cccxxxx
|
|
ccc++++
|
|
dddddddd
|
|
|
|
/a+b?(*THEN)c+(*FAIL)/
|
|
\= Expect no match
|
|
aaabccc
|
|
|
|
/(A (A|B(*ACCEPT)|C) D)(E)/x
|
|
AB
|
|
ABX
|
|
AADE
|
|
ACDE
|
|
\= Expect no match
|
|
AD
|
|
|
|
/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
|
|
1221
|
|
Satan, oscillate my metallic sonatas!
|
|
A man, a plan, a canal: Panama!
|
|
Able was I ere I saw Elba.
|
|
\= Expect no match
|
|
The quick brown fox
|
|
|
|
/^((.)(?1)\2|.)$/
|
|
a
|
|
aba
|
|
aabaa
|
|
abcdcba
|
|
pqaabaaqp
|
|
ablewasiereisawelba
|
|
\= Expect no match
|
|
rhubarb
|
|
the quick brown fox
|
|
|
|
/(a)(?<=b(?1))/
|
|
baz
|
|
\= Expect no match
|
|
caz
|
|
|
|
/(?<=b(?1))(a)/
|
|
zbaaz
|
|
\= Expect no match
|
|
aaa
|
|
|
|
/(?<X>a)(?<=b(?&X))/
|
|
baz
|
|
|
|
/^(?|(abc)|(def))\1/
|
|
abcabc
|
|
defdef
|
|
\= Expect no match
|
|
abcdef
|
|
defabc
|
|
|
|
/^(?|(abc)|(def))(?1)/
|
|
abcabc
|
|
defabc
|
|
\= Expect no match
|
|
defdef
|
|
abcdef
|
|
|
|
/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/x,dupnames
|
|
a\"aaaaa
|
|
b\"aaaaa
|
|
\= Expect no match
|
|
b\"11111
|
|
|
|
/(?:(?1)|B)(A(*F)|C)/
|
|
ABCD
|
|
CCD
|
|
\= Expect no match
|
|
CAD
|
|
|
|
/^(?:(?1)|B)(A(*F)|C)/
|
|
CCD
|
|
BCD
|
|
\= Expect no match
|
|
ABCD
|
|
CAD
|
|
BAD
|
|
|
|
/(?:(?1)|B)(A(*ACCEPT)XX|C)D/
|
|
AAD
|
|
ACD
|
|
BAD
|
|
BCD
|
|
BAX
|
|
\= Expect no match
|
|
ACX
|
|
ABC
|
|
|
|
/(?(DEFINE)(A))B(?1)C/
|
|
BAC
|
|
|
|
/(?(DEFINE)((A)\2))B(?1)C/
|
|
BAAC
|
|
|
|
/(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
|
|
(ab(cd)ef)
|
|
|
|
/^(?=a(*SKIP)b|ac)/
|
|
\= Expect no match
|
|
ac
|
|
|
|
/^(?=a(*PRUNE)b)/
|
|
ab
|
|
\= Expect no match
|
|
ac
|
|
|
|
/^(?=a(*ACCEPT)b)/
|
|
ac
|
|
|
|
/(?>a\Kb)/
|
|
ab
|
|
|
|
/((?>a\Kb))/
|
|
ab
|
|
|
|
/(a\Kb)/
|
|
ab
|
|
|
|
/^a\Kcz|ac/
|
|
ac
|
|
|
|
/(?>a\Kbz|ab)/
|
|
ab
|
|
|
|
/^(?&t)(?(DEFINE)(?<t>a\Kb))$/
|
|
ab
|
|
|
|
/^([^()]|\((?1)*\))*$/
|
|
a(b)c
|
|
a(b(c)d)e
|
|
|
|
/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
|
|
0
|
|
00
|
|
0000
|
|
|
|
/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
|
|
0
|
|
00
|
|
0000
|
|
|
|
# This one does fail, as expected, in Perl. It needs the complex item at the
|
|
# end of the pattern. A single letter instead of (B|D) makes it not fail, which
|
|
# I think is a Perl bug.
|
|
|
|
/A(*COMMIT)(B|D)/
|
|
\= Expect no match
|
|
ACABX
|
|
|
|
# Check the use of names for failure
|
|
|
|
/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark
|
|
\= Expect no match
|
|
AC
|
|
CB
|
|
|
|
/(*MARK:A)(*SKIP:B)(C|X)/mark
|
|
C
|
|
\= Expect no match
|
|
D
|
|
|
|
/^(A(*THEN:A)B|C(*THEN:B)D)/mark
|
|
\= Expect no match
|
|
CB
|
|
|
|
/^(?:A(*THEN:A)B|C(*THEN:B)D)/mark
|
|
\= Expect no match
|
|
CB
|
|
|
|
/^(?>A(*THEN:A)B|C(*THEN:B)D)/mark
|
|
\= Expect no match
|
|
CB
|
|
|
|
# This should succeed, as the skip causes bump to offset 1 (the mark). Note
|
|
# that we have to have something complicated such as (B|Z) at the end because,
|
|
# for Perl, a simple character somehow causes an unwanted optimization to mess
|
|
# with the handling of backtracking verbs.
|
|
|
|
/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/x,mark
|
|
AAAC
|
|
|
|
# Test skipping over a non-matching mark.
|
|
|
|
/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/x,mark
|
|
AAAC
|
|
|
|
# Check shorthand for MARK.
|
|
|
|
/A(*:A)A+(*SKIP:A)(B|Z) | AC/x,mark
|
|
AAAC
|
|
|
|
/(*:A)A+(*SKIP:A)(B|Z)/mark
|
|
\= Expect no match
|
|
AAAC
|
|
|
|
# This should succeed, as a non-existent skip name disables the skip.
|
|
|
|
/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark
|
|
AAAC
|
|
|
|
/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/x,mark
|
|
AAAC
|
|
|
|
# COMMIT at the start of a pattern should act like an anchor. Again, however,
|
|
# we need the complication for Perl.
|
|
|
|
/(*COMMIT)(A|P)(B|P)(C|P)/
|
|
ABCDEFG
|
|
\= Expect no match
|
|
DEFGABC
|
|
|
|
# COMMIT inside an atomic group can't stop backtracking over the group.
|
|
|
|
/(\w+)(?>b(*COMMIT))\w{2}/
|
|
abbb
|
|
|
|
/(\w+)b(*COMMIT)\w{2}/
|
|
\= Expect no match
|
|
abbb
|
|
|
|
# Check opening parens in comment when seeking forward reference.
|
|
|
|
/(?&t)(?#()(?(DEFINE)(?<t>a))/
|
|
bac
|
|
|
|
# COMMIT should override THEN.
|
|
|
|
/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
|
|
\= Expect no match
|
|
yes
|
|
|
|
/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
|
|
\= Expect no match
|
|
yes
|
|
|
|
/b?(*SKIP)c/
|
|
bc
|
|
abc
|
|
|
|
/(*SKIP)bc/
|
|
\= Expect no match
|
|
a
|
|
|
|
/(*SKIP)b/
|
|
\= Expect no match
|
|
a
|
|
|
|
/(?P<abn>(?P=abn)xxx|)+/
|
|
xxx
|
|
|
|
/(?i:([^b]))(?1)/
|
|
aa
|
|
aA
|
|
\= Expect no match
|
|
ab
|
|
aB
|
|
Ba
|
|
ba
|
|
|
|
/^(?&t)*+(?(DEFINE)(?<t>a))\w$/
|
|
aaaaaaX
|
|
\= Expect no match
|
|
aaaaaa
|
|
|
|
/^(?&t)*(?(DEFINE)(?<t>a))\w$/
|
|
aaaaaaX
|
|
aaaaaa
|
|
|
|
/^(a)*+(\w)/
|
|
aaaaX
|
|
YZ
|
|
\= Expect no match
|
|
aaaa
|
|
|
|
/^(?:a)*+(\w)/
|
|
aaaaX
|
|
YZ
|
|
\= Expect no match
|
|
aaaa
|
|
|
|
/^(a)++(\w)/
|
|
aaaaX
|
|
\= Expect no match
|
|
aaaa
|
|
YZ
|
|
|
|
/^(?:a)++(\w)/
|
|
aaaaX
|
|
\= Expect no match
|
|
aaaa
|
|
YZ
|
|
|
|
/^(a)?+(\w)/
|
|
aaaaX
|
|
YZ
|
|
|
|
/^(?:a)?+(\w)/
|
|
aaaaX
|
|
YZ
|
|
|
|
/^(a){2,}+(\w)/
|
|
aaaaX
|
|
\= Expect no match
|
|
aaa
|
|
YZ
|
|
|
|
/^(?:a){2,}+(\w)/
|
|
aaaaX
|
|
\= Expect no match
|
|
aaa
|
|
YZ
|
|
|
|
/(a|)*(?1)b/
|
|
b
|
|
ab
|
|
aab
|
|
|
|
/(a)++(?1)b/
|
|
\= Expect no match
|
|
ab
|
|
aab
|
|
|
|
/(a)*+(?1)b/
|
|
\= Expect no match
|
|
ab
|
|
aab
|
|
|
|
/(?1)(?:(b)){0}/
|
|
b
|
|
|
|
/(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
|
|
foo(bar(baz)+baz(bop))
|
|
|
|
/(A (A|B(*ACCEPT)|C) D)(E)/x
|
|
AB
|
|
|
|
/\A.*?(a|bc)/
|
|
ba
|
|
|
|
/\A.*?(?:a|bc)++/
|
|
ba
|
|
|
|
/\A.*?(a|bc)++/
|
|
ba
|
|
|
|
/\A.*?(?:a|bc|d)/
|
|
ba
|
|
|
|
/(?:(b))++/
|
|
beetle
|
|
|
|
/(?(?=(a(*ACCEPT)z))a)/
|
|
a
|
|
|
|
/^(a)(?1)+ab/
|
|
aaaab
|
|
|
|
/^(a)(?1)++ab/
|
|
\= Expect no match
|
|
aaaab
|
|
|
|
/^(?=a(*:M))aZ/mark
|
|
aZbc
|
|
|
|
/^(?!(*:M)b)aZ/mark
|
|
aZbc
|
|
|
|
/(?(DEFINE)(a))?b(?1)/
|
|
backgammon
|
|
|
|
/^\N+/
|
|
abc\ndef
|
|
|
|
/^\N{1,}/
|
|
abc\ndef
|
|
|
|
/(?(R)a+|(?R)b)/
|
|
aaaabcde
|
|
|
|
/(?(R)a+|((?R))b)/
|
|
aaaabcde
|
|
|
|
/((?(R)a+|(?1)b))/
|
|
aaaabcde
|
|
|
|
/((?(R1)a+|(?1)b))/
|
|
aaaabcde
|
|
|
|
/((?(R)a|(?1)))*/
|
|
aaa
|
|
|
|
/((?(R)a|(?1)))+/
|
|
aaa
|
|
|
|
/a(*:any
|
|
name)/mark
|
|
abc
|
|
|
|
/(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
|
|
a
|
|
ba
|
|
bba
|
|
|
|
# Checking revised (*THEN) handling.
|
|
|
|
# Capture
|
|
|
|
/^.*? (a(*THEN)b) c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
/^.*? (a(*THEN)b|(*F)) c/x
|
|
aabc
|
|
|
|
/^.*? ( (a(*THEN)b) | (*F) ) c/x
|
|
aabc
|
|
|
|
/^.*? ( (a(*THEN)b) ) c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
# Non-capture
|
|
|
|
/^.*? (?:a(*THEN)b) c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
/^.*? (?:a(*THEN)b|(*F)) c/x
|
|
aabc
|
|
|
|
/^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
|
|
aabc
|
|
|
|
/^.*? (?: (?:a(*THEN)b) ) c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
# Atomic
|
|
|
|
/^.*? (?>a(*THEN)b) c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
/^.*? (?>a(*THEN)b|(*F)) c/x
|
|
aabc
|
|
|
|
/^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
|
|
aabc
|
|
|
|
/^.*? (?> (?>a(*THEN)b) ) c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
# Possessive capture
|
|
|
|
/^.*? (a(*THEN)b)++ c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
/^.*? (a(*THEN)b|(*F))++ c/x
|
|
aabc
|
|
|
|
/^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
|
|
aabc
|
|
|
|
/^.*? ( (a(*THEN)b)++ )++ c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
# Possessive non-capture
|
|
|
|
/^.*? (?:a(*THEN)b)++ c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
/^.*? (?:a(*THEN)b|(*F))++ c/x
|
|
aabc
|
|
|
|
/^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
|
|
aabc
|
|
|
|
/^.*? (?: (?:a(*THEN)b)++ )++ c/x
|
|
\= Expect no match
|
|
aabc
|
|
|
|
# Condition assertion
|
|
|
|
/^(?(?=a(*THEN)b)ab|ac)/
|
|
ac
|
|
|
|
# Condition
|
|
|
|
/^.*?(?(?=a)a|b(*THEN)c)/
|
|
\= Expect no match
|
|
ba
|
|
|
|
/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
|
|
ba
|
|
|
|
/^.*?(?(?=a)a(*THEN)b|c)/
|
|
\= Expect no match
|
|
ac
|
|
|
|
# Assertion
|
|
|
|
/^.*(?=a(*THEN)b)/
|
|
aabc
|
|
|
|
# --------------------------
|
|
|
|
/(?>a(*:m))/imsx,mark
|
|
a
|
|
|
|
/(?>(a)(*:m))/imsx,mark
|
|
a
|
|
|
|
/(?<=a(*ACCEPT)b)c/
|
|
xacd
|
|
|
|
/(?<=(a(*ACCEPT)b))c/
|
|
xacd
|
|
|
|
/(?<=(a(*COMMIT)b))c/
|
|
xabcd
|
|
\= Expect no match
|
|
xacd
|
|
|
|
/(?<!a(*FAIL)b)c/
|
|
xcd
|
|
acd
|
|
|
|
/(?<=a(*:N)b)c/mark
|
|
xabcd
|
|
|
|
/(?<=a(*PRUNE)b)c/
|
|
xabcd
|
|
|
|
/(?<=a(*SKIP)b)c/
|
|
xabcd
|
|
|
|
/(?<=a(*THEN)b)c/
|
|
xabcd
|
|
|
|
/(a)(?2){2}(.)/
|
|
abcd
|
|
|
|
/(*MARK:A)(*PRUNE:B)(C|X)/mark
|
|
C
|
|
\= Expect no match
|
|
D
|
|
|
|
/(*MARK:A)(*PRUNE:B)(C|X)/mark
|
|
C
|
|
\= Expect no match
|
|
D
|
|
|
|
/(*MARK:A)(*THEN:B)(C|X)/mark
|
|
C
|
|
\= Expect no match
|
|
D
|
|
|
|
/(*MARK:A)(*THEN:B)(C|X)/mark,no_start_optimize
|
|
C
|
|
\= Expect no match
|
|
D
|
|
|
|
/(*MARK:A)(*THEN:B)(C|X)/mark
|
|
C
|
|
\= Expect no match
|
|
D
|
|
|
|
# This should fail, as the skip causes a bump to offset 3 (the skip).
|
|
|
|
/A(*MARK:A)A+(*SKIP)(B|Z) | AC/x,mark
|
|
\= Expect no match
|
|
AAAC
|
|
|
|
# Same
|
|
|
|
/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/x,mark
|
|
\= Expect no match
|
|
AAAC
|
|
|
|
/A(*:A)A+(*SKIP)(B|Z) | AC/x,mark
|
|
\= Expect no match
|
|
AAAC
|
|
|
|
# This should fail, as a null name is the same as no name.
|
|
|
|
/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/x,mark
|
|
\= Expect no match
|
|
AAAC
|
|
|
|
# A check on what happens after hitting a mark and them bumping along to
|
|
# something that does not even start. Perl reports tags after the failures
|
|
# here, though it does not when the individual letters are made into something
|
|
# more complicated.
|
|
|
|
/A(*:A)B|XX(*:B)Y/mark
|
|
AABC
|
|
XXYZ
|
|
\= Expect no match
|
|
XAQQ
|
|
XAQQXZZ
|
|
AXQQQ
|
|
AXXQQQ
|
|
|
|
/^(A(*THEN:A)B|C(*THEN:B)D)/mark
|
|
AB
|
|
CD
|
|
\= Expect no match
|
|
AC
|
|
CB
|
|
|
|
/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark
|
|
AB
|
|
CD
|
|
\= Expect no match
|
|
AC
|
|
CB
|
|
|
|
# An empty name does not pass back an empty string. It is the same as if no
|
|
# name were given.
|
|
|
|
/^(A(*PRUNE:)B|C(*PRUNE:B)D)/mark
|
|
AB
|
|
CD
|
|
|
|
# PRUNE goes to next bumpalong; COMMIT does not.
|
|
|
|
/A(*PRUNE:A)B/mark
|
|
ACAB
|
|
|
|
# Mark names can be duplicated.
|
|
|
|
/A(*:A)B|X(*:A)Y/mark
|
|
AABC
|
|
XXYZ
|
|
|
|
/b(*:m)f|a(*:n)w/mark
|
|
aw
|
|
\= Expect no match
|
|
abc
|
|
|
|
/b(*:m)f|aw/mark
|
|
abaw
|
|
\= Expect no match
|
|
abc
|
|
abax
|
|
|
|
/A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/x,mark
|
|
AAAC
|
|
|
|
/(?=a(*MARK:A)b)..x/mark
|
|
abxy
|
|
\= Expect no match
|
|
abpq
|
|
|
|
/(?=a(*MARK:A)b)..(*:Y)x/mark
|
|
abxy
|
|
\= Expect no match
|
|
abpq
|
|
|
|
/(?=a(*PRUNE:A)b)..x/mark
|
|
abxy
|
|
\= Expect no match
|
|
abpq
|
|
|
|
/(?=a(*PRUNE:A)b)..(*:Y)x/mark
|
|
abxy
|
|
\= Expect no match
|
|
abpq
|
|
|
|
/(?=a(*THEN:A)b)..x/mark
|
|
abxy
|
|
\= Expect no match
|
|
abpq
|
|
|
|
/(?=a(*THEN:A)b)..(*:Y)x/mark
|
|
abxy
|
|
\= Expect no match
|
|
abpq
|
|
|
|
/(another)?(\1?)test/
|
|
hello world test
|
|
|
|
/(another)?(\1+)test/
|
|
\= Expect no match
|
|
hello world test
|
|
|
|
/(a(*COMMIT)b){0}a(?1)|aac/
|
|
aac
|
|
|
|
/((?:a?)*)*c/
|
|
aac
|
|
|
|
/((?>a?)*)*c/
|
|
aac
|
|
|
|
/(?>.*?a)(?<=ba)/
|
|
aba
|
|
|
|
/(?:.*?a)(?<=ba)/
|
|
aba
|
|
|
|
/(?>.*?a)b/s
|
|
aab
|
|
|
|
/(?>.*?a)b/
|
|
aab
|
|
|
|
/(?>^a)b/s
|
|
\= Expect no match
|
|
aab
|
|
|
|
/(?>.*?)(?<=(abcd)|(wxyz))/
|
|
alphabetabcd
|
|
endingwxyz
|
|
|
|
/(?>.*)(?<=(abcd)|(wxyz))/
|
|
alphabetabcd
|
|
endingwxyz
|
|
|
|
/(?>.*)foo/
|
|
\= Expect no match
|
|
abcdfooxyz
|
|
|
|
/(?>.*?)foo/
|
|
abcdfooxyz
|
|
|
|
/(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
|
|
ac
|
|
|
|
/(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
|
|
ac
|
|
|
|
/(?<=(*SKIP)ac)a/
|
|
\= Expect no match
|
|
aa
|
|
|
|
/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark
|
|
AAAC
|
|
|
|
/a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/mark
|
|
acacd
|
|
|
|
/A(*SKIP:m)x|A(*SKIP:n)x|AB/mark
|
|
AB
|
|
|
|
/((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/mark
|
|
acacd
|
|
|
|
# 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.
|
|
|
|
# This matches "aaaac"; each PRUNE advances one character until the subject no
|
|
# longer starts with 5 'a's.
|
|
|
|
/aaaaa(*PRUNE)b|a+c/
|
|
aaaaaac
|
|
|
|
# Putting SKIP in front of PRUNE makes no difference, as it is never
|
|
# backtracked onto, whether or not it has a label.
|
|
|
|
/aaaaa(*SKIP)(*PRUNE)b|a+c/
|
|
aaaaaac
|
|
|
|
/aaaaa(*SKIP:N)(*PRUNE)b|a+c/
|
|
aaaaaac
|
|
|
|
/aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
|
|
aaaaaac
|
|
|
|
# Putting THEN in front makes no difference.
|
|
|
|
/aaaaa(*THEN)(*PRUNE)b|a+c/
|
|
aaaaaac
|
|
|
|
# However, putting COMMIT in front of the prune changes it to "no match". I
|
|
# think this is inconsistent and possibly a bug. For the moment, running this
|
|
# test is moved out of the Perl-compatible file.
|
|
|
|
/aaaaa(*COMMIT)(*PRUNE)b|a+c/
|
|
|
|
# OK, lets play the same game again using SKIP instead of PRUNE.
|
|
|
|
# This matches "ac" because SKIP forces the next match to start on the
|
|
# sixth "a".
|
|
|
|
/aaaaa(*SKIP)b|a+c/
|
|
aaaaaac
|
|
|
|
# Putting PRUNE in front makes no difference.
|
|
|
|
/aaaaa(*PRUNE)(*SKIP)b|a+c/
|
|
aaaaaac
|
|
|
|
# Putting THEN in front makes no difference.
|
|
|
|
/aaaaa(*THEN)(*SKIP)b|a+c/
|
|
aaaaaac
|
|
|
|
# In this case, neither does COMMIT. This still matches "ac".
|
|
|
|
/aaaaa(*COMMIT)(*SKIP)b|a+c/
|
|
aaaaaac
|
|
|
|
# This gives "no match", as expected.
|
|
|
|
/aaaaa(*COMMIT)b|a+c/
|
|
\= Expect no match
|
|
aaaaaac
|
|
|
|
# ---- Tests using THEN ----
|
|
|
|
# This matches "aaaaaac", as expected.
|
|
|
|
/aaaaa(*THEN)b|a+c/
|
|
aaaaaac
|
|
|
|
# Putting SKIP in front makes no difference.
|
|
|
|
/aaaaa(*SKIP)(*THEN)b|a+c/
|
|
aaaaaac
|
|
|
|
# Putting PRUNE in front makes no difference.
|
|
|
|
/aaaaa(*PRUNE)(*THEN)b|a+c/
|
|
aaaaaac
|
|
|
|
# Putting COMMIT in front makes no difference.
|
|
|
|
/aaaaa(*COMMIT)(*THEN)b|a+c/
|
|
aaaaaac
|
|
|
|
# End of "priority" tests
|
|
|
|
/aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
|
|
aaaaaa
|
|
|
|
/aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
|
|
aaaaaa
|
|
|
|
/aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
|
|
aaaaaa
|
|
|
|
/aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
|
|
aaaaaa
|
|
|
|
/a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
|
|
aaaac
|
|
|
|
/a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
|
|
aaaac
|
|
|
|
/aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
|
|
aaaac
|
|
|
|
/aaa(*MARK:A)a(*SKIP:A)b|a+c/
|
|
aaaac
|
|
|
|
/a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/mark
|
|
aaaaaac
|
|
|
|
/.?(a|b(*THEN)c)/
|
|
ba
|
|
|
|
/(a(*COMMIT)b)c|abd/
|
|
abc
|
|
\= Expect no match
|
|
abd
|
|
|
|
/(?=a(*COMMIT)b)abc|abd/
|
|
abc
|
|
abd
|
|
|
|
/(?>a(*COMMIT)b)c|abd/
|
|
abc
|
|
abd
|
|
|
|
/a(?=b(*COMMIT)c)[^d]|abd/
|
|
abc
|
|
\= Expect no match
|
|
abd
|
|
|
|
/a(?=bc).|abd/
|
|
abd
|
|
abc
|
|
|
|
/a(?>b(*COMMIT)c)d|abd/
|
|
\= Expect no match
|
|
abceabd
|
|
|
|
/a(?>bc)d|abd/
|
|
abceabd
|
|
|
|
/(?>a(*COMMIT)b)c|abd/
|
|
abd
|
|
|
|
/(?>a(*COMMIT)c)d|abd/
|
|
\= Expect no match
|
|
abd
|
|
|
|
/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
|
|
ac
|
|
|
|
# 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
|
|
|
|
/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/x,mark
|
|
\= Expect no match
|
|
AAAC
|
|
|
|
/^((abc|abcx)(*THEN)y|abcd)/
|
|
abcd
|
|
\= Expect no match
|
|
abcxy
|
|
|
|
/^((yes|no)(*THEN)(*F))?/
|
|
\= Expect no match
|
|
yes
|
|
|
|
/(A (.*) C? (*THEN) | A D) (*FAIL)/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(A (.*) C? (*THEN) | A D) z/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(A (.*) C? (*THEN) | A D) \s* z/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(A (.*) (?:C|) (*THEN) | A D) z/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(A (.*) C{0,6} (*THEN) | A D) z/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x
|
|
\= Expect no match
|
|
AbcdCEBefgBhiBqz
|
|
|
|
/(A (.*) (CE){0,6} (*THEN) | A D) z/x
|
|
\= Expect no match
|
|
AbcdCEBefgBhiBqz
|
|
|
|
/(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(A (.*) (CE*){0,6} (*THEN) | A D) z/x
|
|
\= Expect no match
|
|
AbcdCBefgBhiBqz
|
|
|
|
/(?=a(*COMMIT)b|ac)ac|ac/
|
|
\= Expect no match
|
|
ac
|
|
|
|
/(?=a(*COMMIT)b|(ac)) ac | (a)c/x
|
|
\= Expect no match
|
|
ac
|
|
|
|
# ----
|
|
|
|
/(?(?!b(*THEN)a)bn|bnn)/
|
|
bnn
|
|
|
|
/(?!b(*SKIP)a)bn|bnn/
|
|
bnn
|
|
|
|
/(?(?!b(*SKIP)a)bn|bnn)/
|
|
bnn
|
|
|
|
/(?!b(*PRUNE)a)bn|bnn/
|
|
bnn
|
|
|
|
/(?(?!b(*PRUNE)a)bn|bnn)/
|
|
bnn
|
|
|
|
/(?!b(*COMMIT)a)bn|bnn/
|
|
bnn
|
|
|
|
/(?(?!b(*COMMIT)a)bn|bnn)/
|
|
bnn
|
|
|
|
/(?=b(*SKIP)a)bn|bnn/
|
|
\= Expect no match
|
|
bnn
|
|
|
|
/(?=b(*THEN)a)bn|bnn/
|
|
bnn
|
|
|
|
/^(?!a(*SKIP)b)/
|
|
ac
|
|
|
|
/^(?!a(*SKIP)b)../
|
|
acd
|
|
|
|
/(?!a(*SKIP)b)../
|
|
acd
|
|
|
|
/^(?(?!a(*SKIP)b))/
|
|
ac
|
|
|
|
/^(?!a(*PRUNE)b)../
|
|
acd
|
|
|
|
/(?!a(*PRUNE)b)../
|
|
acd
|
|
|
|
/(?!a(*COMMIT)b)ac|cd/
|
|
ac
|
|
|
|
/\A.*?(?:a|bc)/
|
|
ba
|
|
|
|
/^(A(*THEN)B|C(*THEN)D)/
|
|
CD
|
|
|
|
/(*:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
|
|
abc
|
|
|
|
/(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
|
|
abc
|
|
|
|
/(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
|
|
abc
|
|
|
|
/(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
|
|
abc
|
|
|
|
/^\d*\w{4}/
|
|
1234
|
|
\= Expect no match
|
|
123
|
|
|
|
/^[^b]*\w{4}/
|
|
aaaa
|
|
\= Expect no match
|
|
aaa
|
|
|
|
/^[^b]*\w{4}/i
|
|
aaaa
|
|
\= Expect no match
|
|
aaa
|
|
|
|
/^a*\w{4}/
|
|
aaaa
|
|
\= Expect no match
|
|
aaa
|
|
|
|
/^a*\w{4}/i
|
|
aaaa
|
|
\= Expect no match
|
|
aaa
|
|
|
|
/(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
|
|
foofoo
|
|
barbar
|
|
|
|
/(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
|
|
AfooA
|
|
AbarA
|
|
\= Expect no match
|
|
Afoofoo
|
|
Abarbar
|
|
|
|
/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
|
|
1 IN SOA non-sp1 non-sp2(
|
|
|
|
/^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/x,dupnames
|
|
Ax
|
|
BAxy
|
|
|
|
/^A\xZ/
|
|
A\0Z
|
|
|
|
/^A\o{123}B/
|
|
A\123B
|
|
|
|
/ ^ a + + b $ /x
|
|
aaaab
|
|
|
|
/ ^ a + #comment
|
|
+ b $ /x
|
|
aaaab
|
|
|
|
/ ^ a + #comment
|
|
#comment
|
|
+ b $ /x
|
|
aaaab
|
|
|
|
/ ^ (?> a + ) b $ /x
|
|
aaaab
|
|
|
|
/ ^ ( a + ) + + \w $ /x
|
|
aaaab
|
|
|
|
/(?:a\Kb)*+/aftertext
|
|
ababc
|
|
|
|
/(?>a\Kb)*/aftertext
|
|
ababc
|
|
|
|
/(?:a\Kb)*/aftertext
|
|
ababc
|
|
|
|
/(a\Kb)*+/aftertext
|
|
ababc
|
|
|
|
/(a\Kb)*/aftertext
|
|
ababc
|
|
|
|
/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
|
|
\= Expect no match
|
|
acb
|
|
|
|
/\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++/
|
|
NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
|
|
|
|
/\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++/
|
|
NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
|
|
|
|
/\A(?:[^\"]++|\"(?:[^\"]++|\"\")++\")++/
|
|
NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
|
|
|
|
/\A([^\"1]++|[\"2]([^\"3]*+|[\"4][\"5])*+[\"6])++/
|
|
NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
|
|
|
|
/^\w+(?>\s*)(?<=\w)/
|
|
test test
|
|
|
|
/(?P<same>a)(?P<same>b)/g,dupnames
|
|
abbaba
|
|
|
|
/(?P<same>a)(?P<same>b)(?P=same)/g,dupnames
|
|
abbaba
|
|
|
|
/(?P=same)?(?P<same>a)(?P<same>b)/g,dupnames
|
|
abbaba
|
|
|
|
/(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/g,dupnames
|
|
\= Expect no match
|
|
bbbaaaccccaaabbbcc
|
|
|
|
/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
|
|
acl
|
|
bdl
|
|
adl
|
|
bcl
|
|
|
|
/\sabc/
|
|
\x{0b}abc
|
|
|
|
/[\Qa]\E]+/
|
|
aa]]
|
|
|
|
/[\Q]a\E]+/
|
|
aa]]
|
|
|
|
/A((((((((a))))))))\8B/
|
|
AaaB
|
|
|
|
/A(((((((((a)))))))))\9B/
|
|
AaaB
|
|
|
|
/A[\8\9]B/
|
|
A8B
|
|
A9B
|
|
|
|
/(|ab)*?d/
|
|
abd
|
|
xyd
|
|
|
|
/(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/
|
|
1234abcd
|
|
|
|
/(\2|a)(\1)/
|
|
aaa
|
|
|
|
/(\2)(\1)/
|
|
|
|
/Z*(|d*){216}/
|
|
|
|
/(?1)(?#?'){8}(a)/
|
|
baaaaaaaaac
|
|
|
|
/((((((((((((x))))))))))))\12/
|
|
xx
|
|
|
|
/A[\8]B[\9]C/
|
|
A8B9C
|
|
|
|
/(?1)()((((((\1++))\x85)+)|))/
|
|
\x85\x85
|
|
|
|
/(?|(\k'Pm')|(?'Pm'))/
|
|
abcd
|
|
|
|
/(?|(aaa)|(b))\g{1}/
|
|
aaaaaa
|
|
bb
|
|
|
|
/(?|(aaa)|(b))(?1)/
|
|
aaaaaa
|
|
baaa
|
|
\= Expect no match
|
|
bb
|
|
|
|
/(?|(aaa)|(b))/
|
|
xaaa
|
|
xbc
|
|
|
|
/(?|(?'a'aaa)|(?'a'b))\k'a'/
|
|
aaaaaa
|
|
bb
|
|
|
|
/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames
|
|
aaaccccaaa
|
|
bccccb
|
|
|
|
# /x does not apply to MARK labels
|
|
|
|
/x (*MARK:ab cd # comment
|
|
ef) x/x,mark
|
|
axxz
|
|
|
|
/(?<=a(B){0}c)X/
|
|
acX
|
|
|
|
/(?<DEFINE>b)(?(DEFINE)(a+))(?&DEFINE)/
|
|
bbbb
|
|
\= Expect no match
|
|
baaab
|
|
|
|
/(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\s])/
|
|
\ Fred:099
|
|
|
|
/(?=.*X)X$/
|
|
\ X
|
|
|
|
/(?s)(?=.*?)b/
|
|
aabc
|
|
|
|
/(Z)(a)\2{1,2}?(?-i)\1X/i
|
|
ZaAAZX
|
|
|
|
/(?'c')XX(?'YYYYYYYYYYYYYYYYYYYYYYYCl')/
|
|
|
|
/[s[:digit:]\E-H]+/
|
|
s09-H
|
|
|
|
/[s[:digit:]\Q\E-H]+/
|
|
s09-H
|
|
|
|
/a+(?:|b)a/
|
|
aaaa
|
|
|
|
/X?(R||){3335}/
|
|
|
|
/(?1)(A(*COMMIT)|B)D/
|
|
ABD
|
|
XABD
|
|
BAD
|
|
ABXABD
|
|
\= Expect no match
|
|
ABX
|
|
|
|
/(?(DEFINE)(?<m> 1? (?=(?<cond>2)?) 1 2 (?('cond')|3)))
|
|
\A
|
|
()
|
|
(?&m)
|
|
\Z/x
|
|
123
|
|
|
|
/^(?:
|
|
(?: A| (1? (?=(?<cond>2)?) (1) 2 (?('cond')|3)) )
|
|
(Z)
|
|
)+$/x
|
|
AZ123Z
|
|
\= Expect no match
|
|
AZ12Z
|
|
|
|
/^ (?(DEFINE) ( (?!(a)\2b)..) ) ()(?1) /x
|
|
acb
|
|
\= Expect no match
|
|
aab
|
|
|
|
/(?>ab|abab){1,5}?M/
|
|
abababababababababababM
|
|
|
|
/(?>ab|abab){2}?M/
|
|
abababM
|
|
|
|
/((?(?=(a))a)+k)/
|
|
bbak
|
|
|
|
/((?(?=(a))a|)+k)/
|
|
bbak
|
|
|
|
/(?(?!(b))a|b)+k/
|
|
ababbalbbadabak
|
|
|
|
/(?!(b))c|b/
|
|
Ab
|
|
Ac
|
|
|
|
/(?=(b))b|c/
|
|
Ab
|
|
Ac
|
|
|
|
/^(.|(.)(?1)\2)$/
|
|
a
|
|
aba
|
|
abcba
|
|
ababa
|
|
abcdcba
|
|
|
|
/^((.)(?1)\2|.?)$/
|
|
a
|
|
aba
|
|
abba
|
|
abcba
|
|
ababa
|
|
abccba
|
|
abcdcba
|
|
abcddcba
|
|
|
|
/^(.)(\1|a(?2))/
|
|
bab
|
|
|
|
/^(.|(.)(?1)?\2)$/
|
|
abcba
|
|
|
|
/^(?(?=(a))abc|def)/
|
|
abc
|
|
|
|
/^(?(?!(a))def|abc)/
|
|
abc
|
|
|
|
/^(?(?=(a)(*ACCEPT))abc|def)/
|
|
abc
|
|
|
|
/^(?(?!(a)(*ACCEPT))def|abc)/
|
|
abc
|
|
|
|
/^(?1)\d{3}(a)/
|
|
a123a
|
|
|
|
# This pattern uses a lot of named subpatterns in order to match email
|
|
# addresses in various formats. It's a heavy test for named subpatterns. In the
|
|
# <atext> group, slash is coded as \x{2f} so that this pattern can also be
|
|
# processed by perltest.sh, which does not cater for an escaped delimiter
|
|
# within the pattern. $ within the pattern must also be escaped. All $ and @
|
|
# characters in subject strings are escaped so that Perl doesn't interpret them
|
|
# as variable insertions and " characters must also be escaped for Perl.
|
|
|
|
# This set of subpatterns is more or less a direct transliteration of the BNF
|
|
# definitions in RFC2822, without any of the obsolete features. The addition of
|
|
# a possessive + to the definition of <phrase> reduced the match limit in PCRE2
|
|
# from over 5 million to just under 400, and eliminated a very noticeable delay
|
|
# when this file was passed to perltest.sh.
|
|
|
|
/(?ix)(?(DEFINE)
|
|
(?<addr_spec> (?&local_part) \@ (?&domain) )
|
|
(?<angle_addr> (?&CFWS)?+ < (?&addr_spec) > (?&CFWS)?+ )
|
|
(?<atext> [a-z\d!#\$%&'*+-\x{2f}=?^_`{|}~] )
|
|
(?<atom> (?&CFWS)?+ (?&atext)+ (?&CFWS)?+ )
|
|
(?<ccontent> (?&ctext) | (?"ed_pair) | (?&comment) )
|
|
(?<ctext> [^\x{9}\x{10}\x{13}\x{7f}-\x{ff}\ ()\\] )
|
|
(?<comment> \( (?: (?&FWS)?+ (?&ccontent) )*+ (?&FWS)?+ \) )
|
|
(?<CFWS> (?: (?&FWS)?+ (?&comment) )* (?# NOT possessive)
|
|
(?: (?&FWS)?+ (?&comment) | (?&FWS) ) )
|
|
(?<dcontent> (?&dtext) | (?"ed_pair) )
|
|
(?<display_name> (?&phrase) )
|
|
(?<domain> (?&dot_atom) | (?&domain_literal) )
|
|
(?<domain_literal> (?&CFWS)?+ \[ (?: (?&FWS)?+ (?&dcontent) )* (?&FWS)?+ \]
|
|
(?&CFWS)?+ )
|
|
(?<dot_atom> (?&CFWS)?+ (?&dot_atom_text) (?&CFWS)?+ )
|
|
(?<dot_atom_text> (?&atext)++ (?: \. (?&atext)++)*+ )
|
|
(?<dtext> [^\x{9}\x{10}\x{13}\x{7f}-\x{ff}\ \[\]\\] )
|
|
(?<FWS> (?: [\t\ ]*+ \n)?+ [\t\ ]++ )
|
|
(?<local_part> (?&dot_atom) | (?"ed_string) )
|
|
(?<mailbox> (?&name_addr) | (?&addr_spec) )
|
|
(?<name_addr> (?&display_name)? (?&angle_addr) )
|
|
(?<phrase> (?&word)++ )
|
|
(?<qcontent> (?&qtext) | (?"ed_pair) )
|
|
(?<quoted_pair> " (?&text) )
|
|
(?<quoted_string> (?&CFWS)?+ " (?: (?&FWS)?+ (?&qcontent))* (?&FWS)?+ "
|
|
(?&CFWS)?+ )
|
|
(?<qtext> [^\x{9}\x{10}\x{13}\x{7f}-\x{ff}\ "\\] )
|
|
(?<text> [^\r\n] )
|
|
(?<word> (?&atom) | (?"ed_string) )
|
|
) # End DEFINE
|
|
^(?&mailbox)$/
|
|
Alan Other <user\@dom.ain>
|
|
<user\@dom.ain>
|
|
user\@dom.ain
|
|
user\@[]
|
|
user\@[domain literal]
|
|
user\@[domain literal with \"[square brackets\"] inside]
|
|
\"A. Other\" <user.1234\@dom.ain> (a comment)
|
|
A. Other <user.1234\@dom.ain> (a comment)
|
|
\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
|
|
\= Expect no match
|
|
A missing angle <user\@some.where
|
|
The quick brown fox
|
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# This pattern uses named groups to match default PCRE2 patterns. It's another
|
|
# heavy test for named subpatterns. Once again, code slash as \x{2f} and escape
|
|
# $ even in classes so that this works with pcre2test.
|
|
|
|
/(?sx)(?(DEFINE)
|
|
|
|
(?<assertion> (?&simple_assertion) | (?&lookaround) )
|
|
|
|
(?<atomic_group> \( \? > (?®ex) \) )
|
|
|
|
(?<back_reference> \\ \d+ |
|
|
\\g (?: [+-]?\d+ | \{ (?: [+-]?\d+ | (?&groupname) ) \} ) |
|
|
\\k <(?&groupname)> |
|
|
\\k '(?&groupname)' |
|
|
\\k \{ (?&groupname) \} |
|
|
\( \? P= (?&groupname) \) )
|
|
|
|
(?<branch> (?:(?&assertion) |
|
|
(?&callout) |
|
|
(?&comment) |
|
|
(?&option_setting) |
|
|
(?&qualified_item) |
|
|
(?"ed_string) |
|
|
(?"ed_string_empty) |
|
|
(?&special_escape) |
|
|
(?&verb)
|
|
)* )
|
|
|
|
(?<callout> \(\?C (?: \d+ |
|
|
(?: (?<D>["'`^%\#\$])
|
|
(?: \k'D'\k'D' | (?!\k'D') . )* \k'D' |
|
|
\{ (?: \}\} | [^}]*+ )* \} )
|
|
)? \) )
|
|
|
|
(?<capturing_group> \( (?: \? P? < (?&groupname) > | \? ' (?&groupname) ' )?
|
|
(?®ex) \) )
|
|
|
|
(?<character_class> \[ \^?+ (?: \] (?&class_item)* | (?&class_item)+ ) \] )
|
|
|
|
(?<character_type> (?! \\N\{\w+\} ) \\ [dDsSwWhHvVRN] )
|
|
|
|
(?<class_item> (?: \[ : (?:
|
|
alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print|
|
|
punct|space|upper|word|xdigit
|
|
) : \] |
|
|
(?"ed_string) |
|
|
(?"ed_string_empty) |
|
|
(?&escaped_character) |
|
|
(?&character_type) |
|
|
[^]] ) )
|
|
|
|
(?<comment> \(\?\# [^)]* \) | (?"ed_string_empty) | \\E )
|
|
|
|
(?<condition> (?: \( [+-]? \d+ \) |
|
|
\( < (?&groupname) > \) |
|
|
\( ' (?&groupname) ' \) |
|
|
\( R \d* \) |
|
|
\( R & (?&groupname) \) |
|
|
\( (?&groupname) \) |
|
|
\( DEFINE \) |
|
|
\( VERSION >?=\d+(?:\.\d\d?)? \) |
|
|
(?&callout)?+ (?&comment)* (?&lookaround) ) )
|
|
|
|
(?<conditional_group> \(\? (?&condition) (?&branch) (?: \| (?&branch) )? \) )
|
|
|
|
(?<delimited_regex> (?<delimiter> [-\x{2f}!"'`=_:;,%&@~]) (?®ex)
|
|
\k'delimiter' .* )
|
|
|
|
(?<escaped_character> \\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\{ [0-7]+ \} |
|
|
x \{ (*COMMIT) [[:xdigit:]]* \} | x [[:xdigit:]]{0,2} |
|
|
[aefnrt] | c[[:print:]] |
|
|
[^[:alnum:]] ) )
|
|
|
|
(?<group> (?&capturing_group) | (?&non_capturing_group) |
|
|
(?&resetting_group) | (?&atomic_group) |
|
|
(?&conditional_group) )
|
|
|
|
(?<groupname> [a-zA-Z_]\w* )
|
|
|
|
(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\$\\] )
|
|
|
|
(?<lookaround> \(\? (?: = | ! | <= | <! ) (?®ex) \) )
|
|
|
|
(?<non_capturing_group> \(\? [iJmnsUx-]* : (?®ex) \) )
|
|
|
|
(?<option_setting> \(\? [iJmnsUx-]* \) )
|
|
|
|
(?<qualified_item> (?:\. |
|
|
(?&lookaround) |
|
|
(?&back_reference) |
|
|
(?&character_class) |
|
|
(?&character_type) |
|
|
(?&escaped_character) |
|
|
(?&group) |
|
|
(?&subroutine_call) |
|
|
(?&literal_character) |
|
|
(?"ed_string)
|
|
) (?&comment)? (?&qualifier)? )
|
|
|
|
(?<qualifier> (?: [?*+] | (?&range_qualifier) ) [+?]? )
|
|
|
|
(?<quoted_string> (?: \\Q (?: (?!\\E | \k'delimiter') . )++ (?: \\E | ) ) )
|
|
|
|
(?<quoted_string_empty> \\Q\\E )
|
|
|
|
(?<range_qualifier> \{ (?: \d+ (?: , \d* )? | , \d+ ) \} )
|
|
|
|
(?<regex> (?&start_item)* (?&branch) (?: \| (?&branch) )* )
|
|
|
|
(?<resetting_group> \( \? \| (?®ex) \) )
|
|
|
|
(?<simple_assertion> \^ | \$ | \\A | \\b | \\B | \\G | \\z | \\Z )
|
|
|
|
(?<special_escape> \\K )
|
|
|
|
(?<start_item> \( \* (?:
|
|
ANY |
|
|
ANYCRLF |
|
|
BSR_ANYCRLF |
|
|
BSR_UNICODE |
|
|
CR |
|
|
CRLF |
|
|
LF |
|
|
LIMIT_MATCH=\d+ |
|
|
LIMIT_DEPTH=\d+ |
|
|
LIMIT_HEAP=\d+ |
|
|
NOTEMPTY |
|
|
NOTEMPTY_ATSTART |
|
|
NO_AUTO_POSSESS |
|
|
NO_DOTSTAR_ANCHOR |
|
|
NO_JIT |
|
|
NO_START_OPT |
|
|
NUL |
|
|
UTF |
|
|
UCP ) \) )
|
|
|
|
(?<subroutine_call> (?: \(\?R\) | \(\?[+-]?\d+\) |
|
|
\(\? (?: & | P> ) (?&groupname) \) |
|
|
\\g < (?&groupname) > |
|
|
\\g ' (?&groupname) ' |
|
|
\\g < [+-]? \d+ > |
|
|
\\g ' [+-]? \d+ ) )
|
|
|
|
(?<verb> \(\* (?: ACCEPT | FAIL | F | COMMIT |
|
|
(?:MARK)?:(?&verbname) |
|
|
(?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \) )
|
|
|
|
(?<verbname> [^)]+ )
|
|
|
|
) # End DEFINE
|
|
# Kick it all off...
|
|
^(?&delimited_regex)$/subject_literal,jitstack=256
|
|
/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
|
|
/(cat(a(ract|tonic)|erpillar)) \1()2(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\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
|
|
/<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
|
|
/^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /
|
|
/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
|
|
/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
|
|
/^(\w++|\s++)*$/
|
|
/a+b?(*THEN)c+(*FAIL)/
|
|
/(A (A|B(*ACCEPT)|C) D)(E)/x
|
|
/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
|
|
/A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B
|
|
/(?C`a``b`)(?C'a''b')(?C"a""b")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})/B,callout_info
|
|
/(?sx)(?(DEFINE)(?<assertion> (?&simple_assertion) | (?&lookaround) )(?<atomic_group> \( \? > (?®ex) \) )(?<back_reference> \\ \d+ | \\g (?: [+-]?\d+ | \{ (?: [+-]?\d+ | (?&groupname) ) \} ) | \\k <(?&groupname)> | \\k '(?&groupname)' | \\k \{ (?&groupname) \} | \( \? P= (?&groupname) \) )(?<branch> (?:(?&assertion) | (?&callout) | (?&comment) | (?&option_setting) | (?&qualified_item) | (?"ed_string) | (?"ed_string_empty) | (?&special_escape) | (?&verb) )* )(?<callout> \(\?C (?: \d+ | (?: (?<D>["'`^%\#\$]) (?: \k'D'\k'D' | (?!\k'D') . )* \k'D' | \{ (?: \}\} | [^}]*+ )* \} ) )? \) )(?<capturing_group> \( (?: \? P? < (?&groupname) > | \? ' (?&groupname) ' )? (?®ex) \) )(?<character_class> \[ \^?+ (?: \] (?&class_item)* | (?&class_item)+ ) \] )(?<character_type> (?! \\N\{\w+\} ) \\ [dDsSwWhHvVRN] )(?<class_item> (?: \[ : (?: alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print| punct|space|upper|word|xdigit ) : \] | (?"ed_string) | (?"ed_string_empty) | (?&escaped_character) | (?&character_type) | [^]] ) )(?<comment> \(\?\# [^)]* \) | (?"ed_string_empty) | \\E )(?<condition> (?: \( [+-]? \d+ \) | \( < (?&groupname) > \) | \( ' (?&groupname) ' \) | \( R \d* \) | \( R & (?&groupname) \) | \( (?&groupname) \) | \( DEFINE \) | \( VERSION >?=\d+(?:\.\d\d?)? \) | (?&callout)?+ (?&comment)* (?&lookaround) ) )(?<conditional_group> \(\? (?&condition) (?&branch) (?: \| (?&branch) )? \) )(?<delimited_regex> (?<delimiter> [-\x{2f}!"'`=_:;,%&@~]) (?®ex) \k'delimiter' .* )(?<escaped_character> \\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\{ [0-7]+ \} | x \{ (*COMMIT) [[:xdigit:]]* \} | x [[:xdigit:]]{0,2} | [aefnrt] | c[[:print:]] | [^[:alnum:]] ) )(?<group> (?&capturing_group) | (?&non_capturing_group) | (?&resetting_group) | (?&atomic_group) | (?&conditional_group) )(?<groupname> [a-zA-Z_]\w* )(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\$\\] )(?<lookaround> \(\? (?: = | ! | <= | <! ) (?®ex) \) )(?<non_capturing_group> \(\? [iJmnsUx-]* : (?®ex) \) )(?<option_setting> \(\? [iJmnsUx-]* \) )(?<qualified_item> (?:\. | (?&lookaround) | (?&back_reference) | (?&character_class) | (?&character_type) | (?&escaped_character) | (?&group) | (?&subroutine_call) | (?&literal_character) | (?"ed_string) ) (?&comment)? (?&qualifier)? )(?<qualifier> (?: [?*+] | (?&range_qualifier) ) [+?]? )(?<quoted_string> (?: \\Q (?: (?!\\E | \k'delimiter') . )++ (?: \\E | ) ) ) (?<quoted_string_empty> \\Q\\E ) (?<range_qualifier> \{ (?: \d+ (?: , \d* )? | , \d+ ) \} )(?<regex> (?&start_item)* (?&branch) (?: \| (?&branch) )* )(?<resetting_group> \( \? \| (?®ex) \) )(?<simple_assertion> \^ | \$ | \\A | \\b | \\B | \\G | \\z | \\Z )(?<special_escape> \\K )(?<start_item> \( \* (?: ANY | ANYCRLF | BSR_ANYCRLF | BSR_UNICODE | CR | CRLF | LF | LIMIT_MATCH=\d+ | LIMIT_DEPTH=\d+ | LIMIT_HEAP=\d+ | NOTEMPTY | NOTEMPTY_ATSTART | NO_AUTO_POSSESS | NO_DOTSTAR_ANCHOR | NO_JIT | NO_START_OPT | NUL | UTF | UCP ) \) )(?<subroutine_call> (?: \(\?R\) | \(\?[+-]?\d+\) | \(\? (?: & | P> ) (?&groupname) \) | \\g < (?&groupname) > | \\g ' (?&groupname) ' | \\g < [+-]? \d+ > | \\g ' [+-]? \d+ ) )(?<verb> \(\* (?: ACCEPT | FAIL | F | COMMIT | (?:MARK)?:(?&verbname) | (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \) )(?<verbname> [^)]+ ))^(?&delimited_regex)$/
|
|
\= Expect no match
|
|
/((?(?C'')\QX\E(?!((?(?C'')(?!X=X));=)r*X=X));=)/
|
|
/(?:(?(2y)a|b)(X))+/
|
|
/a(*MARK)b/
|
|
/a(*CR)b/
|
|
/(?P<abn>(?P=abn)(?<badstufxxx)/
|
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
/<(?x:[a b])>/xx
|
|
< >
|
|
|
|
/<(?:[a b])>/xx
|
|
< >
|
|
|
|
/<(?xxx:[a b])>/
|
|
< >
|
|
|
|
/<(?-x:[a b])>/xx
|
|
< >
|
|
|
|
/[[:digit:]-]+/
|
|
12-24
|
|
|
|
/((?<=((*ACCEPT)) )\1?\b) /
|
|
\= Expect no match
|
|
((?<=((*ACCEPT)) )\\1?\\b)\x20
|
|
|
|
/((?<=((*ACCEPT))X)\1?Y)\1/
|
|
XYYZ
|
|
|
|
/((?<=((*ACCEPT))X)\1?Y(*ACCEPT))\1/
|
|
XYYZ
|
|
|
|
/(?(DEFINE)(?<optional_a>a?)X)^(?&optional_a)a$/
|
|
aa
|
|
a
|
|
|
|
/^(a?)b(?1)a/
|
|
abaa
|
|
aba
|
|
baa
|
|
ba
|
|
|
|
/^(a?)+b(?1)a/
|
|
abaa
|
|
aba
|
|
baa
|
|
ba
|
|
|
|
/^(a?)++b(?1)a/
|
|
abaa
|
|
aba
|
|
baa
|
|
ba
|
|
|
|
/^(a?)+b/
|
|
b
|
|
ab
|
|
aaab
|
|
|
|
/(?=a+)a(a+)++b/
|
|
aab
|
|
|
|
/(?<=\G.)/g,aftertext
|
|
abc
|
|
|
|
/(?<=(?=.)?)/
|
|
|
|
/(?<=(?=.)?+)/
|
|
|
|
/(?<=(?=.)*)/
|
|
|
|
/(?<=(?=.){4,5})/
|
|
|
|
/(?<=(?=.){4,5}x)/
|
|
|
|
/a(?=.(*:X))(*SKIP:X)(*F)|(.)/
|
|
abc
|
|
|
|
/a(?>(*:X))(*SKIP:X)(*F)|(.)/
|
|
abc
|
|
|
|
/a(?:(*:X))(*SKIP:X)(*F)|(.)/
|
|
abc
|
|
|
|
#pattern no_start_optimize
|
|
|
|
/(?>a(*:1))(?>b(*:1))(*SKIP:1)x|.*/
|
|
abc
|
|
|
|
/(?>a(*:1))(?>b)(*SKIP:1)x|.*/
|
|
abc
|
|
|
|
#subject mark
|
|
|
|
/a(*ACCEPT:X)b/
|
|
abc
|
|
|
|
/(?=a(*ACCEPT:QQ)bc)axyz/
|
|
axyz
|
|
|
|
/(?(DEFINE)(a(*ACCEPT:X)))(?1)b/
|
|
abc
|
|
|
|
/a(*F:X)b/
|
|
abc
|
|
|
|
/(?(DEFINE)(a(*F:X)))(?1)b/
|
|
abc
|
|
|
|
/a(*COMMIT:X)b/
|
|
abc
|
|
|
|
/(?(DEFINE)(a(*COMMIT:X)))(?1)b/
|
|
abc
|
|
|
|
/a+(*:Z)b(*COMMIT:X)(*SKIP:Z)c|.*/
|
|
aaaabd
|
|
|
|
/a+(*:Z)b(*COMMIT:X)(*SKIP:X)c|.*/
|
|
aaaabd
|
|
|
|
/a(*COMMIT:X)b/
|
|
axabc
|
|
|
|
#pattern -no_start_optimize
|
|
#subject -mark
|
|
|
|
/(.COMMIT)(*COMMIT::::::::::interal error:::)/
|
|
|
|
/(*COMMIT:ÿÿ)/
|
|
|
|
/(*COMMIT:]w)/
|
|
|
|
/(?i)A(?^)B(?^x:C D)(?^i)e f/
|
|
aBCDE F
|
|
\= Expect no match
|
|
aBCDEF
|
|
AbCDe f
|
|
|
|
/(*pla:foo).{6}/
|
|
abcfoobarxyz
|
|
\= Expect no match
|
|
abcfooba
|
|
|
|
/(*positive_lookahead:foo).{6}/
|
|
abcfoobarxyz
|
|
|
|
/(?(*pla:foo).{6}|a..)/
|
|
foobarbaz
|
|
abcfoobar
|
|
|
|
/(?(*positive_lookahead:foo).{6}|a..)/
|
|
foobarbaz
|
|
abcfoobar
|
|
|
|
/(*plb:foo)bar/
|
|
abcfoobar
|
|
\= Expect no match
|
|
abcbarfoo
|
|
|
|
/(*positive_lookbehind:foo)bar/
|
|
abcfoobar
|
|
\= Expect no match
|
|
abcbarfoo
|
|
|
|
/(?(*plb:foo)bar|baz)/
|
|
abcfoobar
|
|
bazfoobar
|
|
abcbazfoobar
|
|
foobazfoobar
|
|
|
|
/(?(*positive_lookbehind:foo)bar|baz)/
|
|
abcfoobar
|
|
bazfoobar
|
|
abcbazfoobar
|
|
foobazfoobar
|
|
|
|
/(*nlb:foo)bar/
|
|
abcbarfoo
|
|
\= Expect no match
|
|
abcfoobar
|
|
|
|
/(*negative_lookbehind:foo)bar/
|
|
abcbarfoo
|
|
\= Expect no match
|
|
abcfoobar
|
|
|
|
/(?(*nlb:foo)bar|baz)/
|
|
abcfoobaz
|
|
abcbarbaz
|
|
\= Expect no match
|
|
abcfoobar
|
|
|
|
/(?(*negative_lookbehind:foo)bar|baz)/
|
|
abcfoobaz
|
|
abcbarbaz
|
|
\= Expect no match
|
|
abcfoobar
|
|
|
|
/(*atomic:a+)\w/
|
|
aaab
|
|
\= Expect no match
|
|
aaaa
|
|
|
|
/ (?<word> \w+ )* \. /xi
|
|
pokus.
|
|
|
|
/(?(DEFINE) (?<word> \w+ ) ) (?&word)* \./xi
|
|
pokus.
|
|
|
|
/(?(DEFINE) (?<word> \w+ ) ) ( (?&word)* ) \./xi
|
|
pokus.
|
|
|
|
/(?&word)* (?(DEFINE) (?<word> \w+ ) ) \./xi
|
|
pokus.
|
|
|
|
/(?&word)* \. (?<word> \w+ )/xi
|
|
pokus.hokus
|
|
|
|
/a(?(?=(*:2)b).)/mark
|
|
abc
|
|
acb
|
|
|
|
/a(?(?!(*:2)b).)/mark
|
|
acb
|
|
abc
|
|
|
|
/(?:a|ab){1}+c/
|
|
\= Expect no match
|
|
abc
|
|
|
|
/(a|ab){1}+c/
|
|
abc
|
|
|
|
/(a+){1}+a/
|
|
\= Expect no match
|
|
aaaa
|
|
|
|
/(?(DEFINE)(a|ab))(?1){1}+c/
|
|
abc
|
|
|
|
/(?:a|(?=b)|.)*\z/
|
|
abc
|
|
|
|
/(?:a|(?=b)|.)*/
|
|
abc
|
|
|
|
/(?<=a(*SKIP)x)|c/
|
|
abcd
|
|
|
|
/(?<=a(*SKIP)x)|d/
|
|
abcd
|
|
|
|
/(?<=(?=.(?<=x)))/aftertext
|
|
abx
|
|
|
|
/(?<=(?=(?<=a)))b/
|
|
ab
|
|
|
|
/^(?<A>a)(?(<A>)b)((?<=b).*)$/
|
|
abc
|
|
|
|
/^(a\1?){4}$/
|
|
aaaa
|
|
aaaaaa
|
|
|
|
/^((\1+)|\d)+133X$/
|
|
111133X
|
|
|
|
/^(?>.*?([A-Z])(?!.*\1)){26}/i
|
|
The quick brown fox jumps over the lazy dog.
|
|
Jackdaws love my big sphinx of quartz.
|
|
Pack my box with five dozen liquor jugs.
|
|
\= Expect no match
|
|
The quick brown fox jumps over the lazy cat.
|
|
Hackdaws love my big sphinx of quartz.
|
|
Pack my fox with five dozen liquor jugs.
|
|
|
|
/(?<=X(?(DEFINE)(A)))X(*F)/
|
|
\= Expect no match
|
|
AXYZ
|
|
|
|
/(?<=X(?(DEFINE)(A)))./
|
|
AXYZ
|
|
|
|
/(?<=X(?(DEFINE)(.*))Y)./
|
|
AXYZ
|
|
|
|
/(?<=X(?(DEFINE)(Y))(?1))./
|
|
AXYZ
|
|
|
|
/(?(DEFINE)(?<foo>bar))(?<![-a-z0-9])word/
|
|
word
|
|
|
|
/a{1,2,3}b/
|
|
a{1,2,3}b
|
|
|
|
/\214748364/
|
|
>\x{8c}748364<
|
|
|
|
/a{65536/
|
|
>a{65536<
|
|
|
|
/a\K.(?0)*/
|
|
abac
|
|
|
|
/(a\K.(?1)*)/
|
|
abac
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Perl-compatible tests of variable-length lookbehinds.
|
|
|
|
/(?<=ab?c).../g
|
|
abcdefgacxyz
|
|
|
|
/(?<=PQR|ab?c).../g
|
|
abcdefgacxyzPQR123
|
|
|
|
/(?<=ab?c|PQR).../g
|
|
abcdefgacxyzPQR123
|
|
|
|
/(?<=PQ|ab?c).../g
|
|
abcdefgacxyzPQR123
|
|
|
|
/(?<=ab?c|PQ).../g
|
|
abcdefgacxyzPQR123
|
|
|
|
/(?<=a(b?c|d?e?e)f)X./g
|
|
acfX1zzzaefX2zzzadeefX3zzzX4zzz
|
|
|
|
/(?<!a(b?c|d?e?e)f)X./g
|
|
acfX1zzzaefX2zzzadeefX3zzzX4zzz
|
|
|
|
/(?(?<=ab?c)d|e)/
|
|
abcdefg
|
|
acdefg
|
|
axdefg
|
|
|
|
/(?<=\d{2,3}|ABC)./
|
|
ABCD
|
|
|
|
/(?<=(\d{1,255}))X/
|
|
1234X
|
|
|
|
/(?<=a(b?c){3}d)X/
|
|
ZXacbccdXYZ
|
|
|
|
/(?<=a(b?c){0}d)X/
|
|
ZXadXYZ
|
|
|
|
/(?<=a?(b?c){0}d)X./
|
|
ZXadXYZ
|
|
|
|
/(?<=\R)X/
|
|
\x{0a}X
|
|
a\x{0a}X
|
|
a\x{0d}\x{0a}X
|
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
# Altered interpretation of {,n}
|
|
|
|
/a{,3}B/
|
|
XBBB
|
|
XaBBB
|
|
XaaBBB
|
|
XaaaBBB
|
|
XaaaaBBB
|
|
|
|
# But {,} remains not a qualifier
|
|
|
|
/a{,}B/
|
|
Xa{,}BBB
|
|
\= Expect no match
|
|
XBBB
|
|
XaBBB
|
|
|
|
# Checks for non-quantifiers after refactored code
|
|
|
|
/X{/
|
|
ZZX{}YY
|
|
|
|
/X{A/
|
|
ZZX{ABC}
|
|
|
|
/X{}/
|
|
ZZX{}YZ
|
|
|
|
/X{1234/
|
|
ZZX{123456
|
|
|
|
/X{12ABC}/
|
|
ZZX{12ABC}Y
|
|
|
|
/X{1,/
|
|
ZZX{1,...
|
|
|
|
/X{,9/
|
|
ZZX{,9}abc
|
|
|
|
/X{,9]/
|
|
ZZX{,9]..
|
|
|
|
# --------------------------------------------------------------------------
|
|
|
|
/(A)(?-1)(?+1)(B)/
|
|
xxAABBzz
|
|
|
|
/(A)(\g{ -2 }B)/
|
|
XAABX
|
|
|
|
/(A)((?-2)B)/
|
|
XAABX
|
|
|
|
/a\c\X/
|
|
--a\x1cX--
|
|
|
|
/(a)\g{ 1 }/
|
|
baab
|
|
|
|
/a{ 1,2 }/
|
|
Xaaaaa
|
|
|
|
/a{ 1 , 2 }/
|
|
Xaaaaa
|
|
|
|
/(?'name'ab)\k{ name }(?P=name)/
|
|
XabababX
|
|
|
|
/A{,}B/
|
|
A{,}B
|
|
|
|
/A{ , }B/
|
|
A{ , }B
|
|
|
|
/A{ ,3}/
|
|
AAAAAACC
|
|
|
|
/A{ 3, }/
|
|
BBAAAAAACC
|
|
|
|
# This pattern validates regular expression patterns. The original that I was
|
|
# sent was this:
|
|
# /^((?:(?:[^?+*{}()[\]\\|]+|\\.|\[(?:\^?\\.|\^[^\\]|[^\\^])(?:[^\]\\]+|\\.)*\]|\((?:\?[:=!]|\?<[=!]|\?>)?(?1)??\)|\(\?(?:R|[+-]?\d+)\))(?:(?:[?+*]|\{\d+(?:,\d*)?\})[?+]?)?|\|)*)$/
|
|
# This is not very readable, and also does not handle all features. I have done
|
|
# some work on it.
|
|
|
|
/^
|
|
(?<re>
|
|
# A regular expression is zero or more of these items.
|
|
(?:
|
|
# An item is one of these:
|
|
(?:
|
|
[^?+*{}()\[\]\\|]++| # Non-meta characters or unquoted .
|
|
\\.| # Quoted .
|
|
|
|
\[ # Class, which is [
|
|
(?: # Followed by
|
|
\^?\\.| # Optional ^ and any escaped character
|
|
\^[^\\]| # OR ^ and not escaped character
|
|
[^\\^] # OR neither ^ nor \
|
|
) # Followed by
|
|
(?:[^\]\\]+|\\.)*+ # Zero or more (not ] or \) OR escaped dot
|
|
\]| # Class ends with ]
|
|
|
|
\( # Parenthesized group
|
|
(?: # Start with optional
|
|
\?[:=!]| # ? followed by : = !
|
|
\?<[=!]| # OR ?< followed by = or !
|
|
\?> # OR ?>
|
|
)?
|
|
(?&re)?? # Then a nested <re>
|
|
\)| # End parenthesized group
|
|
|
|
\(\? # Other parenthesized items
|
|
(?: # (? followed by
|
|
R| # R
|
|
[+-]?\d++ # Or optional +- and digits
|
|
)
|
|
\)| # End parens
|
|
|
|
\(\* # Verbs
|
|
(?:
|
|
COMMIT|
|
|
FAIL|
|
|
MARK:[^)]*|
|
|
(?:PRUNE|SKIP|THEN)(?::[^\)]*+)?
|
|
)
|
|
\)
|
|
) # End list of items
|
|
|
|
# Followed by an optional quantifier
|
|
|
|
(?:
|
|
(?:
|
|
[?+*] # ?+*
|
|
| # OR
|
|
\{\d+ # { digits
|
|
(?:,\d*)? # optionally followed by ,digits
|
|
\} # then closing }
|
|
| # OR
|
|
\{,\d+} # {,digits}
|
|
)
|
|
[?+]? # optional ungreedy or possessive
|
|
)?
|
|
|
|
| # OR an "item" is a branch ending
|
|
|
|
\|
|
|
|
|
)* # Zero or more top-level items.
|
|
) # End regex group.
|
|
$/x
|
|
[abcdef]
|
|
[abc\\]def]
|
|
a.b|abcd
|
|
ab()d
|
|
ab{1,3}d
|
|
ab{,3}d
|
|
ab(*FAIL)d(*COMMIT)(*SKIP)(*THEN:abc)
|
|
ab(*MARK:xyz)
|
|
(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\\s])
|
|
abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\^\\\\\\?caxyz
|
|
a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz
|
|
\\G(?:(?=(\\1.|)(.))){1,13}?(?!.*\\2.*\\2)\\1\\K\\2
|
|
\= Expect no match
|
|
ab)d
|
|
ab(d
|
|
{4,5}
|
|
a[]b
|
|
(a)(?(1)a|b|c)
|
|
|
|
/^..A(*SKIP)B|C/
|
|
12ADC
|
|
|
|
/(?<!a?)/
|
|
a
|
|
|
|
# End of testinput1
|