Regex: Update PCRE to v8.35.

I was über lazy at first, so took libs from SM.
But actually it's quite easy to compile, so let's update to latest version \o/.
This commit is contained in:
Arkshine
2014-07-05 13:53:30 +02:00
parent d1153b8049
commit d4de0e6f1e
241 changed files with 51074 additions and 15011 deletions

View File

@ -1,6 +1,8 @@
/-- This set of tests is for features that are compatible with all versions of
Perl >= 5.10, in non-UTF-8 mode. It should run clean for both the 8-bit and
16-bit PCRE libraries. --/
Perl >= 5.10, in non-UTF-8 mode. It should run clean for the 8-bit, 16-bit,
and 32-bit PCRE libraries. --/
< forbid 89?=ABCDEFfGILMNPTUWXZ<
/the quick brown fox/
the quick brown fox
@ -2149,18 +2151,35 @@ No match
abc\100\60
0: abc@0
1: abc
/^A\8B\9C$/
A8B9C
0: A8B9C
*** Failers
No match
A\08B\09C
No match
/^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/
ABCDEFGHIHI
0: ABCDEFGHIHI
1: A
2: B
3: C
4: D
5: E
6: F
7: G
8: H
9: I
/abc\81/
abc\081
0: abc\x0081
abc\0\x38\x31
0: abc\x0081
/abc\91/
abc\091
0: abc\x0091
abc\0\x39\x31
0: abc\x0091
/^[A\8B\9C]+$/
A8B9C
0: A8B9C
*** Failers
No match
A8B9C\x00
No match
/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
abcdefghijkllS
@ -5972,18 +5991,6 @@ No match
0:
0:
/^[a-\d]/
abcde
0: a
-things
0: -
0digit
0: 0
*** Failers
No match
bcdef
No match
/^[\d-a]/
abcde
0: a
@ -6006,15 +6013,15 @@ No match
/[\s]+/
> \x09\x0a\x0c\x0d\x0b<
0: \x09\x0a\x0c\x0d
0: \x09\x0a\x0c\x0d\x0b
/\s+/
> \x09\x0a\x0c\x0d\x0b<
0: \x09\x0a\x0c\x0d
0: \x09\x0a\x0c\x0d\x0b
/a b/x
ab
No match
0: ab
/(?!\A)x/m
a\nxb\n
@ -6160,11 +6167,9 @@ No match
1: bc
2: bc
/-- This tests for an IPv6 address in the form where it can have up to --/
/-- eight components, one and only one of which is empty. This must be --/
No match
/-- an internal component. --/
No match
/-- 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
@ -6906,10 +6911,6 @@ No match
bc
0: b
/^(?=(a)){0}b(?1)/
backgammon
0: ba
/^(?=(?1))?[az]([abc])d/
abd
0: abd
@ -7770,20 +7771,12 @@ No match
1: (ab(cd)ef)
2: ef
/^(?!a(*SKIP)b)/
ac
0:
/^(?=a(*SKIP)b|ac)/
** Failers
No match
ac
No match
/^(?=a(*THEN)b|ac)/
ac
0:
/^(?=a(*PRUNE)b)/
ab
0:
@ -7796,10 +7789,6 @@ No match
ac
0:
/^(?(?!a(*SKIP)b))/
ac
0:
/(?>a\Kb)/
ab
0: b
@ -8169,46 +8158,20 @@ No match
1: AB
2: B
/\A.*?(?:a|b(*THEN)c)/
ba
0: ba
/\A.*?(?:a|bc)/
ba
0: ba
/\A.*?(a|b(*THEN)c)/
ba
0: ba
1: a
/\A.*?(a|bc)/
ba
0: ba
1: a
/\A.*?(?:a|b(*THEN)c)++/
ba
0: ba
/\A.*?(?:a|bc)++/
ba
0: ba
/\A.*?(a|b(*THEN)c)++/
ba
0: ba
1: a
/\A.*?(a|bc)++/
ba
0: ba
1: a
/\A.*?(?:a|b(*THEN)c|d)/
ba
0: ba
/\A.*?(?:a|bc|d)/
ba
0: ba
@ -8719,10 +8682,6 @@ No match
aac
0: aac
/(?!a(*COMMIT)b)ac|cd/
ac
0: ac
/((?:a?)*)*c/
aac
0: aac
@ -8795,4 +8754,563 @@ No match
abcdfooxyz
0: foo
/(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
ac
0: ac
/(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
ac
0: ac
/(?<=(*SKIP)ac)a/
aa
No match
/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
AAAC
0: AC
/a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/K
acacd
0: acd
MK: n
/A(*SKIP:m)x|A(*SKIP:n)x|AB/K
AB
0: AB
/((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/K
acacd
0: ac
MK: n
/-- 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
0: aaaac
/-- 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
0: aaaac
/aaaaa(*SKIP:N)(*PRUNE)b|a+c/
aaaaaac
0: aaaac
/aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
aaaaaac
0: aaaac
/-- Putting THEN in front makes no difference. */
/aaaaa(*THEN)(*PRUNE)b|a+c/
aaaaaac
0: aaaac
/-- 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
0: ac
/-- Putting PRUNE in front makes no difference. --/
/aaaaa(*PRUNE)(*SKIP)b|a+c/
aaaaaac
0: ac
/-- Putting THEN in front makes no difference. --/
/aaaaa(*THEN)(*SKIP)b|a+c/
aaaaaac
0: ac
/-- In this case, neither does COMMIT. This still matches "ac". --/
/aaaaa(*COMMIT)(*SKIP)b|a+c/
aaaaaac
0: ac
/-- This gives "no match", as expected. --/
/aaaaa(*COMMIT)b|a+c/
aaaaaac
No match
/------ Tests using THEN ------/
/-- This matches "aaaaaac", as expected. --/
/aaaaa(*THEN)b|a+c/
aaaaaac
0: aaaaaac
/-- Putting SKIP in front makes no difference. --/
/aaaaa(*SKIP)(*THEN)b|a+c/
aaaaaac
0: aaaaaac
/-- Putting PRUNE in front makes no difference. --/
/aaaaa(*PRUNE)(*THEN)b|a+c/
aaaaaac
0: aaaaaac
/-- Putting COMMIT in front makes no difference. --/
/aaaaa(*COMMIT)(*THEN)b|a+c/
aaaaaac
0: aaaaaac
/-- End of "priority" tests --/
/aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
aaaaaa
0: a
/aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
aaaaaa
0: a
/aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
aaaaaa
0: aaaa
/aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
aaaaaa
0: a
/a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
aaaac
0: aac
/a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
aaaac
0: ac
/aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
aaaac
0: aac
/aaa(*MARK:A)a(*SKIP:A)b|a+c/
aaaac
0: ac
/a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/K
aaaaaac
0: ac
/.?(a|b(*THEN)c)/
ba
0: ba
1: a
/(a(*COMMIT)b)c|abd/
abc
0: abc
1: ab
abd
No match
/(?=a(*COMMIT)b)abc|abd/
abc
0: abc
abd
0: abd
/(?>a(*COMMIT)b)c|abd/
abc
0: abc
abd
0: abd
/a(?=b(*COMMIT)c)[^d]|abd/
abd
No match
abc
0: ab
/a(?=bc).|abd/
abd
0: abd
abc
0: ab
/a(?>b(*COMMIT)c)d|abd/
abceabd
No match
/a(?>bc)d|abd/
abceabd
0: abd
/(?>a(*COMMIT)b)c|abd/
abd
0: abd
/(?>a(*COMMIT)c)d|abd/
abd
No match
/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
ac
0: ac
1: <unset>
2: c
/-- These tests were formerly in test 2, but changes in PCRE and Perl have
made them compatible. --/
/^(a)?(?(1)a|b)+$/
*** Failers
No match
a
No match
/(?=a\Kb)ab/
ab
0: b
/(?!a\Kb)ac/
ac
0: ac
/^abc(?<=b\Kc)d/
abcd
0: cd
/^abc(?<!b\Kq)d/
abcd
0: abcd
/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
AAAC
No match, mark = A
/^((abc|abcx)(*THEN)y|abcd)/
abcd
0: abcd
1: abcd
*** Failers
No match
abcxy
No match
/^((yes|no)(*THEN)(*F))?/
yes
No match
/(A (.*) C? (*THEN) | A D) (*FAIL)/x
AbcdCBefgBhiBqz
No match
/(A (.*) C? (*THEN) | A D) z/x
AbcdCBefgBhiBqz
No match
/(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x
AbcdCBefgBhiBqz
No match
/(A (.*) C? (*THEN) | A D) \s* z/x
AbcdCBefgBhiBqz
No match
/(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x
AbcdCBefgBhiBqz
No match
/(A (.*) (?:C|) (*THEN) | A D) z/x
AbcdCBefgBhiBqz
No match
/(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x
AbcdCBefgBhiBqz
No match
/(A (.*) C{0,6} (*THEN) | A D) z/x
AbcdCBefgBhiBqz
No match
/(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x
AbcdCEBefgBhiBqz
No match
/(A (.*) (CE){0,6} (*THEN) | A D) z/x
AbcdCEBefgBhiBqz
No match
/(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x
AbcdCBefgBhiBqz
No match
/(A (.*) (CE*){0,6} (*THEN) | A D) z/x
AbcdCBefgBhiBqz
No match
/(?=a(*COMMIT)b|ac)ac|ac/
ac
No match
/(?=a(*COMMIT)b|(ac)) ac | (a)c/x
ac
No match
/--------/
/(?(?!b(*THEN)a)bn|bnn)/
bnn
0: bn
/(?!b(*SKIP)a)bn|bnn/
bnn
0: bn
/(?(?!b(*SKIP)a)bn|bnn)/
bnn
0: bn
/(?!b(*PRUNE)a)bn|bnn/
bnn
0: bn
/(?(?!b(*PRUNE)a)bn|bnn)/
bnn
0: bn
/(?!b(*COMMIT)a)bn|bnn/
bnn
0: bn
/(?(?!b(*COMMIT)a)bn|bnn)/
bnn
0: bn
/(?=b(*SKIP)a)bn|bnn/
bnn
No match
/(?=b(*THEN)a)bn|bnn/
bnn
0: bnn
/^(?!a(*SKIP)b)/
ac
0:
/^(?!a(*SKIP)b)../
acd
0: ac
/(?!a(*SKIP)b)../
acd
0: ac
/^(?(?!a(*SKIP)b))/
ac
0:
/^(?!a(*PRUNE)b)../
acd
0: ac
/(?!a(*PRUNE)b)../
acd
0: ac
/(?!a(*COMMIT)b)ac|cd/
ac
0: ac
/\A.*?(?:a|bc)/
ba
0: ba
/^(A(*THEN)B|C(*THEN)D)/
CD
0: CD
1: CD
/(*:m(m)(?&y)(?(DEFINE)(?<y>b))/K
abc
0: b
MK: m(m
/(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/K
abc
0: b
MK: m(m
/(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/K
abc
0: b
/(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/K
abc
0: b
MK: m(m
/^\d*\w{4}/
1234
0: 1234
123
No match
/^[^b]*\w{4}/
aaaa
0: aaaa
aaa
No match
/^[^b]*\w{4}/i
aaaa
0: aaaa
aaa
No match
/^a*\w{4}/
aaaa
0: aaaa
aaa
No match
/^a*\w{4}/i
aaaa
0: aaaa
aaa
No match
/(?(?=ab)ab)/+
ca
0:
0+ ca
cd
0:
0+ cd
/(?:(?<n>foo)|(?<n>bar))\k<n>/J
foofoo
0: foofoo
1: foo
barbar
0: barbar
1: <unset>
2: bar
/(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/J
AfooA
0: AfooA
1: A
2: foo
AbarA
0: AbarA
1: A
2: <unset>
3: bar
** Failers
No match
Afoofoo
No match
Abarbar
No match
/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
1 IN SOA non-sp1 non-sp2(
0: 1 IN SOA non-sp1 non-sp2(
1: 1
2: non-sp1
3: non-sp2
/^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/xJ
Ax
0: Ax
1: A
BAxy
0: BAxy
1: <unset>
2: B
3: A
/^A\xZ/
A\0Z
0: A\x00Z
/^A\o{123}B/
A\123B
0: ASB
/ ^ a + + b $ /x
aaaab
0: aaaab
/ ^ a + #comment
+ b $ /x
aaaab
0: aaaab
/ ^ a + #comment
#comment
+ b $ /x
aaaab
0: aaaab
/ ^ (?> a + ) b $ /x
aaaab
0: aaaab
/ ^ ( a + ) + + \w $ /x
aaaab
0: aaaab
1: aaaa
/(?:a\Kb)*+/+
ababc
0: b
0+ c
/(?>a\Kb)*/+
ababc
0: b
0+ c
/(?:a\Kb)*/+
ababc
0: b
0+ c
/(a\Kb)*+/+
ababc
0: b
0+ c
1: ab
/(a\Kb)*/+
ababc
0: b
0+ c
1: ab
/-- End of testinput1 --/