我似乎无法正确使用正则表达式。在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;
}
这里只输出了"begin",而我希望它能匹配整个文本。我的问题是:这里有什么问题,我在哪里可以找到有关
std::regex
引擎语法及其如何处理多行字符串的详细说明。
\n
)。 - Cubbiboost::regex
输出整个字符串。 - Jonathan Wakely