调试正则表达式不匹配

Debug regex mismatch

本文关键字:不匹配 正则表达式 调试      更新时间:2023-10-16

>我想知道在使用 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 处。

我想知道一些关于上面不匹配的事情,例如 不匹配发生在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.

如果您正确处理表达式,这可能适用于上述简单表达式,非常容易出错。

但是想象一下,当表达式变得更加复杂时,例如量词,决策,环顾四周等。然后任务将变得更加困难。


我同意这些评论,并建议使用外部正则表达式工具来测试您的正则表达式。