X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fregex.cpp;h=4dc1b830be562d7822498e5637057abf7c53b6c9;hb=271ffa9434c8d9397bb5170cf1ee670c5265ec60;hp=a1babf46d019b77a1db433a92ed447a0fbd2d6a2;hpb=e3c7585b472744c6101bb714022f7545bb650493;p=libs%2Fcore.git diff --git a/source/regex.cpp b/source/regex.cpp index a1babf4..4dc1b83 100644 --- a/source/regex.cpp +++ b/source/regex.cpp @@ -86,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=='(') @@ -106,13 +116,15 @@ Regex::Code Regex::compile(const string &expr, string::const_iterator &iter, uns } --level; } - else if(*end=='|') + else if(*end=='|' && level==0) { if(branch) break; - else if(level==0) + else has_branches=true; } + else if(*end=='[') + bracket=1; } if(level>0)