]> git.tdb.fi Git - libs/core.git/blobdiff - source/strings/regex.cpp
Add move semantics to Variant
[libs/core.git] / source / strings / regex.cpp
index 832cd85b110ac81d245af918375ddd24256727ef..5307c6990286ba373291281fb4ee230ff81d2d07 100644 (file)
@@ -2,6 +2,7 @@
 #include <list>
 #include <stack>
 #include <vector>
+#include <msp/core/except.h>
 #include "format.h"
 #include "regex.h"
 
@@ -56,7 +57,6 @@ string bad_regex::make_where(const string &e, const string::const_iterator &i)
 
 Regex::Regex(const string &expr)
 {
-       n_groups = 0;
        auto iter = expr.begin();
        code = compile(expr, iter, n_groups, false);
        ++n_groups;
@@ -130,7 +130,8 @@ Regex::Code Regex::compile(const string &expr, string::const_iterator &iter, uns
 
                        Count repeat_min = 1;
                        Count repeat_max = 1;
-                       parse_repeat(expr, i, repeat_min, repeat_max);
+                       if(i!=end)
+                               parse_repeat(expr, i, repeat_min, repeat_max);
 
                        for(unsigned j=0; j<repeat_min; ++j)
                                result += atom;
@@ -477,7 +478,7 @@ bool Regex::run(const string &str, const string::const_iterator &begin, vector<R
                                                input_consumed = true;
                                        }
                                        else
-                                               throw logic_error("invalid instruction in regex bytecode");
+                                               throw internal_error("invalid instruction in regex bytecode");
 
                                        if(match_result==negate_match)
                                                terminate = true;