Fix the general case of quantified regex back-references.
Tom Lane <tgl@sss.pgh.pa.us>
Fix the general case of quantified regex back-references. Cases where a back-reference is part of a larger subexpression that is quantified have never worked in Spencer's regex engine, because he used a compile-time transformation that neglected the need to check the back-reference match in iterations before the last one. (That was okay for capturing parens, and we still do it if the regex has *only* capturing parens ... but it's not okay for backrefs.) To make this work properly, we have to add an "iteration" node type to the regex engine's vocabulary of sub-regex nodes. Since this is a moderately large change with a fair risk of introducing new bugs of its own, apply to HEAD only, even though it's a fix for a longstanding bug.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/regex/README | modified | +9 −9 |
| src/backend/regex/regcomp.c | modified | +52 −36 |
| src/backend/regex/regexec.c | modified | +757 −7 |
| src/include/regex/regguts.h | modified | +21 −3 |
| src/test/regress/expected/regex.out | modified | +37 −0 |
| src/test/regress/sql/regex.sql | modified | +8 −0 |