我想知道在使用std :: regex匹配std :: string时是否存在某种关于不匹配的诊断方法。
std::string to_match = "abc123abc123";
std::regex re("(abc)(123)(sss)123");
bool b = std::regex_match(to_match, re);
我想了解一些有关上面的不匹配的信息,例如,不匹配发生在to_match的字符7处。
答案 0 :(得分:2)
我想了解一些有关上述不匹配的信息,例如 不匹配发生在to_match中的字符7。
在标准库中没有实用程序可让您查看正则表达式的不匹配。
表达式匹配或不匹配,如此简单。
如果您绝对想找到不匹配的地方(对于简单表达式),我想您可以选择蛮力路线
(abc)(123)(sss)123
匹配吗?(abc)(123)(sss)12
匹配吗?(abc)(123)(sss)1
匹配吗?(abc)(123)(sss)
匹配吗?等等但这只是一种方法,它并不能说明删除像
这样的子表达式(abc)(123)(sss)123
^^^^^
taking away that
您将需要处理括号:
Does "(abc)(123)(sss" match?
^
ops, missing parenthesis. This will throw an exception.
如果您正确地处理表达式,这可能会适用于上述简单表达式,很容易出错。
但是想像一下,当表达式变得更加复杂时,例如量词,决策,环顾四周等,任务就会变得更加困难。
我同意这些评论,并建议使用外部正则表达式工具来测试您的正则表达式。