我正在研究类似于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
和匹配应包含first
和second
。
答案 0 :(得分: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"
不匹配,因为它在模式的其余部分之前紧跟一个字符(不是反斜杠)。这可以用负面断言代替字符组来修复,但我尝试的简单测试不起作用,我现在不想在其中加入更多时间。