您可以防止std :: regex对无效表达式引发异常吗?

时间:2018-08-08 16:45:06

标签: c++ regex std

std::regex regex("*", std::regex_constants::icase);

这将引发异常。如果我有 disabled 已禁用的异常,它将终止应用程序,这意味着我无法捕获它,并且不像往常一样对它执行任何操作。

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

我在想,也许我可以在尝试构造函数之前拿出一个单独的正则表达式来解析输入的正则表达式表达式字符串,但是我更希望有一个替代方法。

1 个答案:

答案 0 :(得分:1)

不能。没有标准的方法可以做到这一点。异常是标准库的固有组成部分,甚至不抛出自身异常的接口(例如臭名昭​​著的import Foundation import GoogleCast class GcastChannel: GCKCastChannel { var gcastDelegate: GcastDelegate? override func didReceiveTextMessage(_ message: String) { if let jsonData = message.data(using: .utf8) { do { let gcastEvent = try JSONDecoder().decode( GcastEvent.self, from: jsonData) gcastDelegate?.didReceiveGcastEvent(event: gcastEvent) } catch { print("message decode error: \(error)") } } } } 的基于func sessionManager(_ sessionManager: GCKSessionManager, didStart session: GCKCastSession) { castSession = session castSession?.add(gcastChannel) gcastChannel.gcastDelegate = self } 的接口)也可以为其他操作抛出异常。

您最好的选择是使用一个无异常的库,例如启用了error_code标志的Boost.Regex。然后,您可以使用成员函数status,在构造<filesystem>之后检查错误。