1

私はC++のテンプレートエンジンに似たものに取り組んでいます。標準<regex>ライブラリを使用して、次のパターンを持つ文字列で複数の一致を見つけるにはどうすればよいですかAB $1 BA(ABではエスケープ文字では機能しません\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ます。

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

于 2012-10-27T18:56:36.897 に答える