当正则表达式出现在行首时,如何匹配它,即使它不一定位于字符串的开头?
我的目标是能够使用正则表达式查找字符串中
#include <file.ext>
的所有实例,以便我可以将它们替换为文件的内容。 (基本上,模拟 C++ 对头文件的作用。)
void main() {
std::string src =
"#include <abc.xyz>\n"
"This is not an include.\n"
"This #include <should.be> ignored.\n"
"#include <def.xyz>\n"
"This is also not an include.";
std::regex spec(R"(^#include[\s]+<[a-zA-z0-9_.]+>)");
std::smatch match;
// Print all matches.
std::cout << "[Print Start]" << std::endl;
std::string::const_iterator iter(src.cbegin());
while (iter != src.end()) {
std::regex_search(iter, src.cend(), match, spec);
if (!match.ready()) { continue; }
std::cout << match.str() << std::endl;
iter = match.suffix().first;
}
std::cout << "[Print End]" << std::endl;
}
目前输出为
#include <abc.xyz>
。#include <abc.xyz>
和 #include <def.xyz>
。
构建正则表达式时指定
multiline
语法标志:
std::regex spec(R"(^#include[\s]+<[a-zA-z0-9_.]+>)", std::regex::ECMAScript | std::regex::multiline);