got it, thanks
Peter Boot wrote:Just as with Perl and with Boost.Regex, you could create backreferences and check to see which participated in the match:
Is there functionality included in boost::xpressive::regex_search(...) that would allow you to know which of an alternated group of expressions e.g. "aaa|bbb|ccc" matched a substring in the input ?
"(aaa)|(bbb)|(ccc)"
Then pass a match_results<> object to regex_search and check "what[N].matched" for N=1,2,3 (assuming your match_results<> object was named "what").
If the alternates are all string literals, then you can use an xpressive symbol table instead and discover which alternate matched more efficiently. For that you'd initialize a std::map with your alternates ...
std::map<string,int> syms;
syms["aaa"] = 1;
syms["bbb"] = 2;
syms["ccc"] = 3;
int which = 0;
// Match a symbol, write the corresponding
// integer into "which"
sregex rx = (a1= syms)[ ref(which) = a1 ];
HTH,
--
Eric Niebler
BoostPro Computing
http://www.boostpro.com
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users