1

我正在研究类似于 C++ 模板引擎的东西。使用标准<regex>库,如何在具有此模式的字符串中找到多个匹配项:(AB $1 BA不使用 AB 上的转义字符,es. \AB,但使用 AB 之前的任何其他字符)并将匹配项存储在字符串向量中?

例如:

string main_string = "Something cool \AB blabla BA, something else AB first BA, something AB second BA more.";
vector<string> matches;
// algorithm here

and 匹配应该包含firstand second

4

1 回答 1

0
#include <string>
#include <regex>
#include <vector>
#include <iostream>

int main() {
    std::string target_text(
        "Something cool \\AB blabla BA, something else AB first BA, "
        "something AB second BA more.");
    std::vector<std::string> result;
    typedef std::string::const_iterator iter_type;
    std::regex rgx("[^\\\\]AB(.*?)BA");
    std::regex_iterator<iter_type> iter(target_text.begin(),
                                        target_text.end(),
                                        rgx);
    std::regex_iterator<iter_type> end;
    for ( ; iter != end; ++iter)
        result.push_back((*iter)[1].str());
    for (int i = 0; i < result.size(); ++i)
        std::cout << result[i] << '\n';
    return 0;
}

正则表达式不太正确;它不会匹配"ABcBA",因为它在模式的其余部分之前坚持一个字符(不是反斜杠)。这可以用否定断言代替字符组来解决,但是我尝试的简单测试不起作用,我现在不想花更多时间。

于 2012-10-27T18:56:36.897 回答