2010-05-17 4 views
0

Mon code:boost :: regex_replace() ne remplace que la première occurrence, pourquoi?

#include <string> 
#include <boost/algorithm/string/regex.hpp> 
std::cout << boost::algorithm::replace_regex_copy(
    "{x}{y}", // source string 
    boost::regex("\\{.*?\\}"), // what to find 
    std::string("{...}") // what to replace to 
); 

Voici ce que je vois:

{…}{y} 

Ainsi, seule la première occurrence remplacé. Pourquoi? Comment le résoudre?

Répondre

0

Vous pouvez utiliser replace_all_regex_copy() au lieu de replace_regex_copy()

+0

merci beaucoup! :) – yegor256

0

L'expression régulière * (zéro ou plus du précédent) correspond à l'opérateur autant de caractères de la chaîne source possible, où le *? L'opérateur fait correspondre le moins de caractères possible.

Ainsi, les .*? en boost::regex("\\{.*?\\}") matchs seulement le x dans votre chaîne source (ce ne serait pas même le faire, sauf que vous avez dit à correspondre } après) et correspond à l'expression entière {x}.

Si vous souhaitez réellement faire correspondre toute la chaîne, vous devez utiliser boost::regex("\\{.*\\}") à la place.

À moins que vous vouliez réellement remplacer à la fois {x} et {y} avec {...}, c'est ... dans ce cas, veuillez ignorer mon message. (-:

Questions connexes