2017-09-09 3 views
0

J'écris un programme qui fait des manipulations de cordes avec boost::regex. Dans tous les cas, je besoin de la fonctionnalité de regex_search, mais seulement des cas particuliers ont besoin regex_replace. Est-il possible de combiner les deux pour que le remplacement ne refaire pas le travail de recherche ?boost :: recherche regex et remplacerai

Je sais que après avoir appelé

boost::regex re; 
std::string str, fmt; 
// . . . 
boost::smatch match; 
regex_search(str, match, re); 

match contient des informations sur la correspondance, mais

match.format(fmt); 

ne fait pas ce

regex_replace(str, re, fmt); 

fait.

+0

Pouvez-vous s'il vous plaît expliquer pourquoi vous pensiez que c'était une mauvaise question? – SU3

Répondre

1

Peut-être utiliser un remplacement dynamique: C++ boost regex replace with conditions

L'exemple il a un C++ 03, C++ 11 variantes avec/sans nom nommé sous-correspondances.

#include <boost/regex.hpp> 
#include <iostream> 

int main() { 
    std::string pattern = "dddd, mmmm d, yyyy"; 
    pattern = boost::regex_replace(pattern, boost::regex("(dddd)|(d)|(mmmm)|(yyyy)"), [](auto& match)->std::string{ 
     if (match.str() == "dddd") 
      return "Tuesday"; 

     if (match.str() == "d") 
      return "26"; 

     if (match.str() == "mmmm") 
      return "December"; 

     if (match.str() == "yyyy") 
      return "2016"; 

     return ""; 
    }); 

    std::cout << "Result: " << pattern << "\n"; 
}