Extraire d'une string avec les regex

Le problème exposé dans ce sujet a été résolu.

Bonsoir,

J’ai une chaîne de caractères qui a disons la valeur suivante : \033[33m0x7ffee784e96c\033[0m. J’aimerais récupérer la valeur de cette chaîne sans les caractères d’échappements ANSI c’est à dire juste la valeur 0x7ffee784e96c. Une chaîne peut avoir aucun ou plusieurs séquences d’échappements. Par exemple :

  • 0x7ffee784e96c\033[0m deviendrais 0x7ffee784e96c ;
  • \033[33m\033[1m0x7ffee784e96c\033[0m deviendrais 0x7ffee784e96c

J’ai écrit la regex suivante que j’ai testé et qui semble bien sélectionner les éléments à retirer :

[\\033]+\[[0-9]+m

Comment obtenir à l’aide de la bibliothèque regex le résultat voulu ? J’ai essayé ça :

#include <iostream>
#include <regex>
#include <string>


int main() 
{
    std::string original{"\033[33m\033[1m0x7ffee784e96c\033[0m"}; // Goal: 0x7ffee784e96c 
    std::regex rgx{"[\\033]+\[[0-9]+m"};

    std::cout << std::regex_replace(original, rgx, "") << std::endl;

    return 0;
}

Et j’ai obtenu en sortie : 7ffee784e96c (un caractère en plus semble ne pas être affiché avant le [ du début).

Merci pour votre aide !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte