264 |
case OP_KETRMIN: |
case OP_KETRMIN: |
265 |
return TRUE; |
return TRUE; |
266 |
|
|
267 |
|
/* Skip over entire bracket groups with zero lower bound */ |
268 |
|
|
269 |
|
case OP_BRAZERO: |
270 |
|
case OP_BRAMINZERO: |
271 |
|
cc++; |
272 |
|
/* Fall through */ |
273 |
|
|
274 |
/* Skip over assertive subpatterns */ |
/* Skip over assertive subpatterns */ |
275 |
|
|
276 |
case OP_ASSERT: |
case OP_ASSERT: |
285 |
case OP_EOD: |
case OP_EOD: |
286 |
case OP_CIRC: |
case OP_CIRC: |
287 |
case OP_DOLL: |
case OP_DOLL: |
|
case OP_BRAZERO: |
|
|
case OP_BRAMINZERO: |
|
288 |
case OP_NOT_WORD_BOUNDARY: |
case OP_NOT_WORD_BOUNDARY: |
289 |
case OP_WORD_BOUNDARY: |
case OP_WORD_BOUNDARY: |
290 |
cc++; |
cc++; |
623 |
int repeat_type, op_type; |
int repeat_type, op_type; |
624 |
int repeat_min, repeat_max; |
int repeat_min, repeat_max; |
625 |
int bravalue, length; |
int bravalue, length; |
626 |
|
int greedy_default, greedy_non_default; |
627 |
register int c; |
register int c; |
628 |
register uschar *code = *codeptr; |
register uschar *code = *codeptr; |
629 |
const uschar *ptr = *ptrptr; |
const uschar *ptr = *ptrptr; |
631 |
uschar *previous = NULL; |
uschar *previous = NULL; |
632 |
uschar class[32]; |
uschar class[32]; |
633 |
|
|
634 |
|
/* Set up the default and non-default settings for greediness */ |
635 |
|
|
636 |
|
greedy_default = ((options & PCRE_UNGREEDY) != 0); |
637 |
|
greedy_non_default = greedy_default ^ 1; |
638 |
|
|
639 |
/* Switch on next character until the end of the branch */ |
/* Switch on next character until the end of the branch */ |
640 |
|
|
641 |
for (;; ptr++) |
for (;; ptr++) |
913 |
goto FAILED; |
goto FAILED; |
914 |
} |
} |
915 |
|
|
916 |
/* If the next character is '?' this is a minimizing repeat. Advance to the |
/* If the next character is '?' this is a minimizing repeat, by default, |
917 |
|
but if PCRE_UNGREEDY is set, it works the other way round. Advance to the |
918 |
next character. */ |
next character. */ |
919 |
|
|
920 |
if (ptr[1] == '?') { repeat_type = 1; ptr++; } else repeat_type = 0; |
if (ptr[1] == '?') |
921 |
|
{ repeat_type = greedy_non_default; ptr++; } |
922 |
|
else repeat_type = greedy_default; |
923 |
|
|
924 |
/* If the maximum is zero then the minimum must also be zero; Perl allows |
/* If the maximum is zero then the minimum must also be zero; Perl allows |
925 |
this case, so we do too - by simply omitting the item altogether. */ |
this case, so we do too - by simply omitting the item altogether. */ |
1158 |
case 'm': |
case 'm': |
1159 |
case 's': |
case 's': |
1160 |
case 'x': |
case 'x': |
1161 |
|
case 'U': |
1162 |
|
case 'X': |
1163 |
ptr++; |
ptr++; |
1164 |
while (*ptr != ')') ptr++; |
while (*ptr != ')') ptr++; |
1165 |
previous = NULL; |
previous = NULL; |
1763 |
ptr += 2; |
ptr += 2; |
1764 |
break; |
break; |
1765 |
} |
} |
1766 |
/* Else fall thourh */ |
/* Else fall through */ |
1767 |
|
|
1768 |
/* Else loop setting valid options until ) is met. Anything else is an |
/* Else loop setting valid options until ) is met. Anything else is an |
1769 |
error. */ |
error. */ |
1793 |
length -= spaces; /* Already counted spaces */ |
length -= spaces; /* Already counted spaces */ |
1794 |
continue; |
continue; |
1795 |
} |
} |
1796 |
|
else if (c == 'X') |
1797 |
|
{ |
1798 |
|
options |= PCRE_EXTRA; |
1799 |
|
continue; |
1800 |
|
} |
1801 |
|
else if (c == 'U') |
1802 |
|
{ |
1803 |
|
options |= PCRE_UNGREEDY; |
1804 |
|
continue; |
1805 |
|
} |
1806 |
else if (c == ')') break; |
else if (c == ')') break; |
1807 |
|
|
1808 |
*errorptr = ERR12; |
*errorptr = ERR12; |
2008 |
|
|
2009 |
if (re->options != 0) |
if (re->options != 0) |
2010 |
{ |
{ |
2011 |
printf("%s%s%s%s%s%s%s\n", |
printf("%s%s%s%s%s%s%s%s\n", |
2012 |
((re->options & PCRE_ANCHORED) != 0)? "anchored " : "", |
((re->options & PCRE_ANCHORED) != 0)? "anchored " : "", |
2013 |
((re->options & PCRE_CASELESS) != 0)? "caseless " : "", |
((re->options & PCRE_CASELESS) != 0)? "caseless " : "", |
2014 |
((re->options & PCRE_EXTENDED) != 0)? "extended " : "", |
((re->options & PCRE_EXTENDED) != 0)? "extended " : "", |
2015 |
((re->options & PCRE_MULTILINE) != 0)? "multiline " : "", |
((re->options & PCRE_MULTILINE) != 0)? "multiline " : "", |
2016 |
((re->options & PCRE_DOTALL) != 0)? "dotall " : "", |
((re->options & PCRE_DOTALL) != 0)? "dotall " : "", |
2017 |
((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "", |
((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "", |
2018 |
((re->options & PCRE_EXTRA) != 0)? "extra " : ""); |
((re->options & PCRE_EXTRA) != 0)? "extra " : "", |
2019 |
|
((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : ""); |
2020 |
} |
} |
2021 |
|
|
2022 |
if ((re->options & PCRE_FIRSTSET) != 0) |
if ((re->options & PCRE_FIRSTSET) != 0) |