diff --git a/drivers/nrex/nrex.cpp b/drivers/nrex/nrex.cpp index 36a5bb4cedc..696d46240e7 100644 --- a/drivers/nrex/nrex.cpp +++ b/drivers/nrex/nrex.cpp @@ -246,7 +246,18 @@ struct nrex_node_group : public nrex_node { return res; } - if ((res >= 0) != negate) + if (negate) + { + if (res < 0) + { + res = pos + 1; + } + else + { + return -1; + } + } + if (res >= 0) { if (capturing >= 0) { @@ -479,7 +490,6 @@ struct nrex_node_quantifier : public nrex_node { nrex_array backtrack; backtrack.push(pos); - s->complete = false; while (backtrack.top() <= s->end) { if (max >= 1 && backtrack.size() > (unsigned int)max) @@ -502,7 +512,6 @@ struct nrex_node_quantifier : public nrex_node return res; } } - s->complete = false; int res = child->test(s, backtrack.top()); if (s->complete) { @@ -516,12 +525,7 @@ struct nrex_node_quantifier : public nrex_node } while (greedy && (unsigned int) min < backtrack.size()) { - s->complete = false; int res = backtrack.top(); - if (s->complete) - { - return res; - } if (next) { res = next->test(s, res); @@ -530,6 +534,10 @@ struct nrex_node_quantifier : public nrex_node { return res; } + if (s->complete) + { + return res; + } backtrack.pop(); } return -1;