你能防止 std::regex 在无效表达式上抛出异常吗?

Can you prevent std::regex from throwing exception on invalid expressions?

本文关键字:表达式 抛出异常 无效 regex std      更新时间:2023-10-16
std::regex regex("*", std::regex_constants::icase);

这将引发异常。如果我禁用了异常,它将终止应用程序,这意味着我无法捕获它并且像往常一样对它不做任何事情。

有没有办法防止无效正则表达式在构造时抛出异常?还是存在的某种std::regex::isvalid("*")检查?

我在想也许我可以想出一个单独的正则表达式,在我尝试构造函数之前解析输入正则表达式字符串,但我更喜欢另一种选择。

你不能。没有标准的方法可以做到这一点。异常是标准库的固有部分,即使是不抛出自己的异常的接口(例如臭名昭著的基于error_code的接口<filesystem>(也可以为其他操作抛出异常。

最好的办法是使用设计为无异常的库,例如启用了no_except标志的 Boost.Regex。然后,您可以使用成员函数状态在构造boost::basic_regex后检查错误。