我似乎无法让我的正则表达式正常工作。在 ECMAScript 中的多行文本上,这个正则表达式begin\n([\s\S]*\nend)?
完全符合我的需要,我在这里对其进行了测试。
当我将它翻译成 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
引擎语法的详细描述以及它们如何处理多行字符串。