Ignore qualifiers on lookaheads within lookbehinds when checking for a fixed
length.
This commit is contained in:
parent
1c79bdf36f
commit
b2294373d7
|
@ -100,6 +100,10 @@ a pattern. Because \G is in a lookbehind assertion, there has to be a
|
||||||
"bumpalong" before there can be a match. The automatic "advance by one
|
"bumpalong" before there can be a match. The automatic "advance by one
|
||||||
character after an empty string match" rule is therefore inappropriate. A more
|
character after an empty string match" rule is therefore inappropriate. A more
|
||||||
complicated algorithm has now been implemented.
|
complicated algorithm has now been implemented.
|
||||||
|
|
||||||
|
22. When checking to see if a lookbehind is of fixed length, lookaheads were
|
||||||
|
correctly ignored, but qualifiers on lookaheads were not being ignored, leading
|
||||||
|
to an incorrect "lookbehind assertion is not fixed length" error.
|
||||||
|
|
||||||
|
|
||||||
Version 10.31 12-February-2018
|
Version 10.31 12-February-2018
|
||||||
|
|
|
@ -8572,6 +8572,32 @@ for (;; pptr++)
|
||||||
case META_LOOKAHEADNOT:
|
case META_LOOKAHEADNOT:
|
||||||
pptr = parsed_skip(pptr + 1, PSKIP_KET);
|
pptr = parsed_skip(pptr + 1, PSKIP_KET);
|
||||||
if (pptr == NULL) goto PARSED_SKIP_FAILED;
|
if (pptr == NULL) goto PARSED_SKIP_FAILED;
|
||||||
|
|
||||||
|
/* Also ignore any qualifiers that follow a lookahead assertion. */
|
||||||
|
|
||||||
|
switch (pptr[1])
|
||||||
|
{
|
||||||
|
case META_ASTERISK:
|
||||||
|
case META_ASTERISK_PLUS:
|
||||||
|
case META_ASTERISK_QUERY:
|
||||||
|
case META_PLUS:
|
||||||
|
case META_PLUS_PLUS:
|
||||||
|
case META_PLUS_QUERY:
|
||||||
|
case META_QUERY:
|
||||||
|
case META_QUERY_PLUS:
|
||||||
|
case META_QUERY_QUERY:
|
||||||
|
pptr++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case META_MINMAX:
|
||||||
|
case META_MINMAX_PLUS:
|
||||||
|
case META_MINMAX_QUERY:
|
||||||
|
pptr += 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Lookbehinds can be ignored, but must themselves be checked. */
|
/* Lookbehinds can be ignored, but must themselves be checked. */
|
||||||
|
|
|
@ -6192,4 +6192,14 @@ ef) x/x,mark
|
||||||
/(?<=\G.)/g,aftertext
|
/(?<=\G.)/g,aftertext
|
||||||
abc
|
abc
|
||||||
|
|
||||||
|
/(?<=(?=.)?)/
|
||||||
|
|
||||||
|
/(?<=(?=.)?+)/
|
||||||
|
|
||||||
|
/(?<=(?=.)*)/
|
||||||
|
|
||||||
|
/(?<=(?=.){4,5})/
|
||||||
|
|
||||||
|
/(?<=(?=.){4,5}x)/
|
||||||
|
|
||||||
# End of testinput1
|
# End of testinput1
|
||||||
|
|
|
@ -5435,4 +5435,6 @@ a)"xI
|
||||||
|
|
||||||
/(?=a+)a(a+)++b/B
|
/(?=a+)a(a+)++b/B
|
||||||
|
|
||||||
|
/(?<=(?=.){4,5}x)/B
|
||||||
|
|
||||||
# End of testinput2
|
# End of testinput2
|
||||||
|
|
|
@ -9831,4 +9831,14 @@ No match
|
||||||
0:
|
0:
|
||||||
0+
|
0+
|
||||||
|
|
||||||
|
/(?<=(?=.)?)/
|
||||||
|
|
||||||
|
/(?<=(?=.)?+)/
|
||||||
|
|
||||||
|
/(?<=(?=.)*)/
|
||||||
|
|
||||||
|
/(?<=(?=.){4,5})/
|
||||||
|
|
||||||
|
/(?<=(?=.){4,5}x)/
|
||||||
|
|
||||||
# End of testinput1
|
# End of testinput1
|
||||||
|
|
|
@ -16583,6 +16583,20 @@ No match
|
||||||
End
|
End
|
||||||
------------------------------------------------------------------
|
------------------------------------------------------------------
|
||||||
|
|
||||||
|
/(?<=(?=.){4,5}x)/B
|
||||||
|
------------------------------------------------------------------
|
||||||
|
Bra
|
||||||
|
AssertB
|
||||||
|
Reverse
|
||||||
|
Assert
|
||||||
|
Any
|
||||||
|
Ket
|
||||||
|
x
|
||||||
|
Ket
|
||||||
|
Ket
|
||||||
|
End
|
||||||
|
------------------------------------------------------------------
|
||||||
|
|
||||||
# End of testinput2
|
# End of testinput2
|
||||||
Error -70: PCRE2_ERROR_BADDATA (unknown error number)
|
Error -70: PCRE2_ERROR_BADDATA (unknown error number)
|
||||||
Error -62: bad serialized data
|
Error -62: bad serialized data
|
||||||
|
|
Loading…
Reference in New Issue