gpt4 book ai didi

c++ - 这个正则表达式 "mismatched"的括号是什么?

转载 作者:太空狗 更新时间:2023-10-29 22:54:26 25 4
gpt4 key购买 nike

考虑这个 C++ 代码:

#include <iostream>
#include <regex>
#include <string>

int main()
{
regex_match("'c'", std::regex("'[\x00-\x7F]'"));
std::cout << "Reached!";
}

当我用 clang++ 8.0.0 编译它时,它在运行时崩溃并出现以下错误:

libc++abi.dylib: terminating with uncaught exception of type std::__1::regex_error: The expression contained mismatched [ and ].
Abort trap: 6

但是括号不匹配到什么程度呢?我有一个左括号,它由一个右括号关闭。我的错误是什么?

最佳答案

几个小时前的评论中已经提到了正确答案。由于评论者似乎不会回来,所以我将在此总结一下。

这里,\x00就是\0,表示C风格字符串的结尾。 regex 是用 C 风格的字符串构造的,因此构造函数看到的实际上是 "'[" 而不是所需的 "'[\x00-\x7F]'"。换句话说,C 风格的字符串不能包含 \0 字符。这就解释了为什么图书馆提示你的括号不匹配。

由于正则表达式允许直接使用转义,你可以让构造函数看到字符\x00\本身需要转义,所以是"\\x00"。请注意,在这种情况下,您向构造函数传递了四个字符,而不是一个。与 \x7F 相同。

std::regex("'[\\x00-\\x7F]'")

或者,您可以使用原始字符串,这样您就不必转义反斜杠。

std::regex(R"('[\x00-\x7F]')")

关于c++ - 这个正则表达式 "mismatched"的括号是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55941005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com