C++ 正则表达式如何匹配行的开头,而不仅仅是字符串的开头? [重复]

问题描述 投票:0回答:1

当正则表达式出现在行首时,如何匹配它,即使它不一定位于字符串的开头?

我的目标是能够使用正则表达式查找字符串中

#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>

c++ regex
1个回答
0
投票

构建正则表达式时指定

multiline
语法标志:

std::regex spec(R"(^#include[\s]+<[a-zA-z0-9_.]+>)", std::regex::ECMAScript | std::regex::multiline);
© www.soinside.com 2019 - 2024. All rights reserved.