gpt4 book ai didi

c++ - 为什么我无法构建此正则表达式

转载 作者:太空狗 更新时间:2023-10-29 20:54:37 24 4
gpt4 key购买 nike

我写了这个正则表达式:

(.+?)\s*{?\s*(.+?;)\s*}?\s*

哪个测试正常:https://regex101.com/r/gD2eN7/1

但是当我尝试用 C++ 构建它时,我遇到了运行时错误。

Unhandled exception at 0x7714C52F in temp2.exe: Microsoft C++ exception:
std::regex_error at memory location 0x003BF2EC.

const auto input = "if (KnR)\n\tfoo();\nif (spaces) {\n    foo();\n}\nif (allman)\n{\n\tfoo();\n}\nif (horstmann)\n{\tfoo();\n}\nif (pico)\n{\tfoo(); }\nif (whitesmiths)\n\t{\n\tfoo();\n\t}"s;

cout << input << endl;

cout << regex_replace(input, regex("(.+?)\\s*{?\\s*(.+?;)\\s*}?\\s*"), "$1 {\n\t$2\n}\n") << endl;

Live Example

我是否使用了 C++ 不支持的功能?

最佳答案

您需要转义大括号。查看std::regex ECMAScript flavor reference :

\character
The character character as it is, without interpreting its special meaning within a regex expression. Any character can be escaped except those which form any of the special character sequences above.
Needed for: ^ $ \ . * + ? ( ) [ ] { } |

regex_replace(input, regex("(.+?)\\s*\\{?\\s*(.+?;)\\s*\\}?\\s*"), "$1 {\n\t$2\n}\n")

这是一个 IDEONE demo

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

using namespace std;

int main() {
const auto input = "if (KnR)\n\tfoo();\nif (spaces) {\n foo();\n}\nif (allman)\n{\n\tfoo();\n}\nif (horstmann)\n{\tfoo();\n}\nif (pico)\n{\tfoo(); }\nif (whitesmiths)\n\t{\n\tfoo();\n\t}"s;

cout << regex_replace(input, regex("(.+?)\\s*\\{?\\s*(.+?;)\\s*\\}?\\s*"), "$1 {\n\t$2\n}\n") << endl;
// ^^ ^^
}

关于c++ - 为什么我无法构建此正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38513032/

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