Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 替换HTML<;i>;Perl6中带有彩色文本的标记_Search_Replace_Colors_Eval_Raku - Fatal编程技术网

Search 替换HTML<;i>;Perl6中带有彩色文本的标记

Search 替换HTML<;i>;Perl6中带有彩色文本的标记,search,replace,colors,eval,raku,Search,Replace,Colors,Eval,Raku,我从带有多个HTML标记的数据库中获取一个字符串,并希望在终端中显示带有颜色的标记单词。我尝试了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 { c

我从带有多个HTML标记的数据库中获取一个字符串,并希望在终端中显示带有颜色的标记单词。我尝试了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";
使用v6;
使用终端::ANSIColor;
my$str=“Text mit einem kursiven und noch einem schrägen麦汁。”;
我的$str1=“Text mit einem{colored(“kursiven”,“blue')}和noch einem{colored(“schrägen”,“blue')}麦汁。”;
说“\n原始字符串:”;
说$str~“\n”;
说“它应该是什么样子的:”;
说$str1~“\n”;
说“Var 01:分两步移除标记:”;
my$str_01=$str.subst(“,”,:g).subst(“,”,:g);
比如说$str_01;
说“=>ok\n”;
说“Var 02:删除带有动态内容的标记:”;
my$str_02=$str.subst(/“”(.*?“/,->{$0},:g);
比如说$str_02;
说“=>ok with non-greedy search\n”;
说“VAR03:将静态内容变成蓝色:”;
my$str_03=$str.subst(/“kursiven”/->{colored(“kursiven”,“blue”)},:g);
比如说$str_03;
说“=>基本正常,但第二部分未更换\n”;
说“Var04:尝试类似Var01的东西:”;
my$str\u 04=$str.subst(“,”{colored\(\”,:g)
.subst(“,”蓝色“\)}“,:g);
比如说$str_04;
说“=>最后一个字符串是可以的,但是\{\}只是显示而没有执行!!\n”;
说“VAR05:应该将动态内容变成蓝色”;
my$str_05=$str.subst(/“(.*?)/,>{colored($0,'blue')},:g);
比如说$str_05;
说“=>总失败次数\n”;
是否可以在一个步骤中完成此操作,还是必须先用静态占位符替换标记和文本,然后再替换此占位符?

$str.subst(
:全球,
/
这两个标签之间的“~”#
(.*)#不贪婪地匹配任何字符
/,
#将每个引用替换为以下内容
Q:标量[{彩色($0,'blue')}]
)

对于任何更复杂的问题,我都会使用语法结合actions类。

在使用Brads answer后,我发现以下方法有效:

$str.subst(

    :global,

    /

        '<i>' ~ '</i>' # between these two tags:

            ( .*? )    # match any character non-greedily

    /,

    # replace each occurrence with the following
    { colored( "$0" , 'blue') }

)
$str.subst(
:全球,
/
这两个标签之间的“~”#
(.*)#不贪婪地匹配任何字符
/,
#将每个引用替换为以下内容
{彩色($0,'blue')}
)

我收到一条警告“在字符串上下文中使用Nil…”,而且也没有给出任何结果。为了得到$0作为替换,我必须写->{$0}。这同样适用于对“colored”的函数调用。“但这对两个都不起作用。”布拉德·吉尔伯特,回答得好。请考虑在注释或回答“为什么使用了<代码> Q:标量[{有色(“0美元”,“蓝色”)} /代码>”而不是“纯代码< >代码> >“颜色”(“0”,“蓝色”)} /代码>,如由@ USER2444 64建议的S/EVA/ReXEX/标签中的句子?