I want to search for a specific characters position from a string. Specific characters are given by vectors. So, I want to combine ascii::string rules from vector.
I used "|=" operands. But it not works.
#include <iostream>
#include <string>
#include <vector>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
#include <boost/spirit/include/phoenix_stl.hpp>
namespace qi    = boost::spirit::qi;
namespace ascii    = boost::spirit::ascii;
int main()
{
    std::string test = "abc def aaa ffew";
    auto itr = test.begin(), end = test.end();
    std::vector<std::string> find_list = {"des", "ffe", "asaa"};
    std::string result;
    {
        std::string result;
        qi::rule<std::string::iterator, std::string()> rule;
        rule = ascii::string(find_list[0]) | ascii::string(find_list[1]) | ascii::string(find_list[2]);
        // this works
        if (qi::parse(itr, end, (qi::omit[*(qi::char_ - rule)] >> rule), result)) {
            std::cout << result << std::endl;
        } else std::cout << "failed." << std::endl;
    }
    itr = test.begin();
    // Sample that what I want to do
    {
        std::string result;
        qi::rule<std::string::iterator, std::string()> rule;
        for (auto && str : find_list) {
            // this is not equals rule = ascii::string(find_list)[0] | ascii::string(find_list)[1] | .... [n] ??
            rule |= ascii::string(str); 
        }
        // this not works
        if (qi::parse(itr, end, (qi::omit[*(qi::char_ - rule)] >> rule), result)) {
            std::cout << result << std::endl;
        } else std::cout << "failed." << std::endl;
    }
    return 0;
}
output:
ffe
failed.
0
What should I do? Thanks for the help in advance.