Ignore qualifiers on lookaheads within lookbehinds when checking for a fixed
length.
This commit is contained in:
parent
1c79bdf36f
commit
b2294373d7
|
@ -101,6 +101,10 @@ a pattern. Because \G is in a lookbehind assertion, there has to be a
|
|||
character after an empty string match" rule is therefore inappropriate. A more
|
||||
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
|
||||
------------------------------
|
||||
|
|
|
@ -8572,6 +8572,32 @@ for (;; pptr++)
|
|||
case META_LOOKAHEADNOT:
|
||||
pptr = parsed_skip(pptr + 1, PSKIP_KET);
|
||||
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;
|
||||
|
||||
/* Lookbehinds can be ignored, but must themselves be checked. */
|
||||
|
|
|
@ -6192,4 +6192,14 @@ ef) x/x,mark
|
|||
/(?<=\G.)/g,aftertext
|
||||
abc
|
||||
|
||||
/(?<=(?=.)?)/
|
||||
|
||||
/(?<=(?=.)?+)/
|
||||
|
||||
/(?<=(?=.)*)/
|
||||
|
||||
/(?<=(?=.){4,5})/
|
||||
|
||||
/(?<=(?=.){4,5}x)/
|
||||
|
||||
# End of testinput1
|
||||
|
|
|
@ -5435,4 +5435,6 @@ a)"xI
|
|||
|
||||
/(?=a+)a(a+)++b/B
|
||||
|
||||
/(?<=(?=.){4,5}x)/B
|
||||
|
||||
# End of testinput2
|
||||
|
|
|
@ -9831,4 +9831,14 @@ No match
|
|||
0:
|
||||
0+
|
||||
|
||||
/(?<=(?=.)?)/
|
||||
|
||||
/(?<=(?=.)?+)/
|
||||
|
||||
/(?<=(?=.)*)/
|
||||
|
||||
/(?<=(?=.){4,5})/
|
||||
|
||||
/(?<=(?=.){4,5}x)/
|
||||
|
||||
# End of testinput1
|
||||
|
|
|
@ -16583,6 +16583,20 @@ No match
|
|||
End
|
||||
------------------------------------------------------------------
|
||||
|
||||
/(?<=(?=.){4,5}x)/B
|
||||
------------------------------------------------------------------
|
||||
Bra
|
||||
AssertB
|
||||
Reverse
|
||||
Assert
|
||||
Any
|
||||
Ket
|
||||
x
|
||||
Ket
|
||||
Ket
|
||||
End
|
||||
------------------------------------------------------------------
|
||||
|
||||
# End of testinput2
|
||||
Error -70: PCRE2_ERROR_BADDATA (unknown error number)
|
||||
Error -62: bad serialized data
|
||||
|
|
Loading…
Reference in New Issue