用c ++中的正则表达式递归匹配整个字符串

时间:2016-02-12 16:45:07

标签: c++ regex c++11

我正在做以下事情:

#include <iostream>
#include <regex>
#include <string>

typedef std::regex_iterator<std::string::iterator> RegexIterator;
typedef std::string String;
typedef std::regex Regex;


bool isComplyingToRegex(String& s,Regex &re){
    String total="";
    RegexIterator it(s.begin(), s.end(), re);
    RegexIterator it_end;
    while(it!=it_end){total+=it->str();++it;}
    if(s!=total){return false;}
    else return true;
}


int main(){
    String name="/jk/";
    String pat = R"(\s*/([^/]*)/([^/]*)/\s*([gi]{0,2})\s*(;\s*|$))";
    Regex multi_re (pat);
    std::cout<< isComplyingToRegex(name,multi_re);
}

字符串/jk/不应匹配,但不知何故。要匹配的条件最少,应该有3个斜杠(/),但/jk/有两个斜杠匹配。对于更复杂的字符串,它可以正常工作。我只是用这个简单的字符串看到了这种行为。

如果我对该字符串使用std::regex_search,它也会返回true。

我的代码或正则表达式语法有问题吗?

regex101link

0 个答案:

没有答案