为啥 std::regex_match 会产生不同的结果

Posted

技术标签:

【中文标题】为啥 std::regex_match 会产生不同的结果【英文标题】:Why does std::regex_match generate different results为什么 std::regex_match 会产生不同的结果 【发布时间】:2021-11-10 04:12:32 【问题描述】:

我正在尝试使用 std::regex 来验证我的 c++11 项目中文件中的一些变量。

现在我需要验证一个字符串是否是一个有效的 URL。这是我的代码:https://godbolt.org/z/4Pn9eYEce

如您所见,它按预期工作。它返回一个true

但是,当我在我的服务器上运行相同的代码时,它会返回一个 false

我真的不知道为什么。

我的服务器是Ubuntu 16.04.4 LTS,GCC的版本是5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1~16.04.11)。

【问题讨论】:

Why not upload images of code/errors when asking a question? 问题必须包含所有文本和必要的代码,以免在外部链接失效时变得无效。此外 Ubuntu 16.04 已经过时,此处不受支持或Ask Ubuntu 【参考方案1】:

必须是编译器的东西,在gcc5.4上用-Wformat -std=c++17编译, 然后运行它也会返回 0。

https://godbolt.org/z/a8o9x9nWP

最好将编译器更新到新版本。

【讨论】:

但是我无权升级我的编译器...好吧,也许我现在不得不放弃这种验证... 阅读:***.com/questions/12530406/…。似乎他们在 5.4 中也没有做到这一点。那你可以为你更新编译器吗?我知道我会开始四处询问以解决真正的问题;)不要轻易放弃。 这个链接有帮助,至少我可以根据我的 GCC 版本控制返回值......现在我会告诉我的团队这个问题,但领导者可能会决定升级编译器2 或 3 年……哈哈。 在安装了新编译器的测试系统上运行测试构建,然后运行单元/集成测试。这将表明升级前的风险程度。

以上是关于为啥 std::regex_match 会产生不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

std::regex_match 与字符 é è à

为啥这两个 NHibernate 查询会产生不同的结果?

为啥这个程序会产生与 `YES` 和 `true` 不同的结果?

为啥 SVC、NuSVC 和 LinearSVC 会产生截然不同的结果?

为啥 SQL 子查询中的外部引用会产生不同的结果?

为啥 DateTimeOffset 的 DataContractJsonSerializer 和 Json.NET 序列化会产生不同的 json?