我正在做以下事情:
#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。
我的代码或正则表达式语法有问题吗?