Je reçois une chaîne d'une base de données avec plusieurs balises HTML et je veux afficher les mots marqués avec des couleurs dans un terminal. J'ai essayé cela avec Perl6 mais je n'ai pas trouvé de solution de travail. Voici les étapes que j'essayées:Remplacer HTML <i> Tags avec du texte en couleur en Perl6
use v6;
use Terminal::ANSIColor;
my $str = "Text mit einem <i>kursiven</i> und noch einem <i>schrägen</i> Wort.";
my $str1 = "Text mit einem { colored("kursiven" , 'blue') } und noch einem { colored("schrägen" , 'blue') } Wort.";
say "\nOriginal String:";
say $str ~ "\n";
say "and how it should look like:";
say $str1 ~ "\n";
say "Var 01: Remove the tags in 2 steps:";
my $str_01 = $str.subst("<i>" , "" , :g).subst("</i>" , "" , :g);
say $str_01;
say "==> ok\n";
say "Var 02: Remove the tags with dynamic content:";
my $str_02 = $str.subst(/"<i>"(.*?)"</i>"/ , -> { $0 } , :g);
say $str_02;
say "==> ok with non greedy search\n";
say "Var 03: Turns static content into blue:";
my $str_03 = $str.subst(/"<i>kursiven</i>"/ , -> { colored("kursiven" , 'blue') } , :g);
say $str_03;
say "==> nearly ok but second part not replaced\n";
say "Var 04: Trying something similar to Var 01:";
my $str_04 = $str.subst("<i>" , "\{ colored\(\"" , :g)
.subst("</i>" , "\" , 'blue'\) }" , :g);
say $str_04;
say "==> final String is ok but the \{ \} is just displayed and not executed !!\n";
say "Var 05: Should turn dynamic content into blue";
my $str_05 = $str.subst(/"<i>(.*?)</i>"/ , -> { colored($0 , 'blue') } , :g);
say $str_05;
say "==> total fail\n";
Est-il possible de le faire en une seule étape ou ne je dois d'abord remplacer les balises et le texte avec un espace réservé statique puis remplacer à nouveau?
Peut-être s/Eval/regex/dans les balises? – raiph