X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fregex.cpp;h=c2590f2c8f8d9109606d06499da24b6b51c87e80;hp=48fe4a7c3422fb027c40481d1f7d39b8fc7010d3;hb=5c8c0d5e52bbba8dc3f9c7c71b6e4c973216c600;hpb=47df471884234130a2a27f0a5fc842df3f994a3e diff --git a/source/regex.cpp b/source/regex.cpp index 48fe4a7..c2590f2 100644 --- a/source/regex.cpp +++ b/source/regex.cpp @@ -4,7 +4,9 @@ This file is part of libmspstrings Copyright © 2007 Mikko Rasa Distributed under the LGPL */ + #include +#include #include #include "formatter.h" #include "regex.h" @@ -84,11 +86,21 @@ Regex::Code Regex::compile(const string &expr, string::const_iterator &iter, uns bool has_branches=false; unsigned level=0; bool escape=false; + unsigned bracket=0; string::const_iterator end; for(end=iter; end!=expr.end(); ++end) { if(escape) escape=false; + else if(bracket) + { + if(bracket==3 && *end==']') + bracket=0; + else if(bracket==1 && *end=='^') + bracket=2; + else + bracket=3; + } else if(*end=='\\') escape=true; else if(*end=='(') @@ -111,6 +123,8 @@ Regex::Code Regex::compile(const string &expr, string::const_iterator &iter, uns else if(level==0) has_branches=true; } + else if(*end=='[') + bracket=1; } if(level>0) @@ -306,7 +320,7 @@ Regex::Code Regex::parse_brackets(const string &str, string::const_iterator &ite } string::const_iterator end=iter; - for(; (end!=str.end() && (end==iter || *end!=']')); ++end); + for(; (end!=str.end() && (end==iter || *end!=']')); ++end) ; if(end==str.end()) throw InvalidParameterValue("Unmatched '['");