#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"
これは、パターンの残りの部分の直前に 1 文字 (バックスラッシュではない) を要求するため、一致しません。これは、文字グループの代わりに否定的なアサートを使用して修正できますが、私が試した簡単なテストは機能せず、これ以上時間をかけたくありません。