Zher Huei Lee 10 лет назад
Родитель
Сommit
d9f1a85948
1 измененных файлов с 16 добавлено и 8 удалено
  1. 16 8
      drivers/nrex/nrex.cpp

+ 16 - 8
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<int> 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;