gpt4 book ai didi

C++ std::regex 多行语法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:30 26 4
gpt4 key购买 nike

我似乎无法让我的正则表达式正常工作。在 ECMAScript 中的多行文本中,此正则表达式 begin\n([\s\S]*\nend)? 完全符合我的需要,I tested it here .

当我将它翻译成 C++ 时,它无法匹配相同的文本。

这是我在 Visual C++ 2010 中的代码:

#include <iostream>
#include <regex>

int main(int argc, char *argv[]) {
std::regex metadataBlockRegex("begin\\n([\\s\\S]*\\nend)?",
std::regex::ECMAScript);

std::string text =
"begin\n"
" 123\n"
"end\n";

std::sregex_iterator blocksBegin(text.begin(), text.end(), metadataBlockRegex);
std::sregex_iterator blocksEnd;

for (auto blockMatch = blocksBegin; blockMatch != blocksEnd; ++blockMatch) {
std::cout << (*blockMatch)[0].str();
}
return 0;
}

这只输出“开始”,我希望它能匹配整个文本。

我的问题是:这里有什么问题,我在哪里可以找到 std::regex 引擎语法的详细描述以及它们如何处理多行字符串。

最佳答案

不支持多行,无论如何...不在 MSVC10 中。

您需要在您的模式中使用 \r &\n 伪造多行。这是一个大问题。

关于C++ std::regex 多行语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121647/

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