perl6有色匹配,一些正则表达式插值有效,有些则没有;颜色代码不一致

perl6有色匹配,一些正则表达式插值有效,有些则没有;颜色代码不一致,第1张

概述我有一些长队,我想用我想要的颜色突出显示匹配.一个函数使用替换,另一个函数使用递归.有些是作品,有些则没有;我正在寻找一种插入到正则表达式的一致方法.非常感谢你 !!! sub colorMatch ($aStr, $aRegex, $aColor) { my $colorOff = '\e[0m'; my $a =$aStr.subst(/(<{$aRegex}>)/, $aCo 我有一些长队,我想用我想要的颜色突出显示匹配.一个函数使用替换,另一个函数使用递归.有些是作品,有些则没有;我正在寻找一种插入到正则表达式的一致方法.非常感谢你 !!!

sub colorMatch ($aStr,$aRegex,$acolor) {    my $colorOff = '\e[0m';    my $a =$aStr.subst(/(<{$aRegex}>)/,$acolor ~ "# $/ #" ~ $colorOff,:g);    # not working,$/ not interpolating corresponding matches,all Nil    say $a;}colorMatch("a-12-b-3-c-4-def-567",'\d+','\e[1;31m');colorMatch("a-12-b-3-c-4-def-567",'<Alpha>+','\e[1;31m');say "\e[1;31m" ~ " color1 " ~ "\e[0m" ~     "\e[1;36m" ~ " color2 " ~ "\e[0m";sub colorMatch2 ($aStr,$colorNumber) {    my $colorOff = "\e[0m";    if $aStr.chars > 0 {    my $x1 = ($aStr ~~ m/<{$aRegex}>/);    my $x2 = $x1.prematch;    my $x3 = $x1.Str;    my $x4 = $x1.postmatch;    return ($x2 ~ "\e[1;{$colorNumber}m" ~ $x3 ~ $colorOff)        ~ colorMatch2($x4,$colorNumber);    }}say colorMatch2("a-12-b-3-c-4-def-567",31); # works,red colorsay colorMatch2("a-12-b-3-c-4-def-567",'567',36); # works,green colorsay colorMatch2("a-12-b-3-c-4-def-567",'\w+','[a..z]+',31); # fails with [] and ..say colorMatch2("a-12-b-3-c-4-def-567","<Alpha>+",31); # fails with <>Use of Nil in string context  in sub colorMatch at colorMatch.pl line 4a-\e[1;31m#  #\e[0m-b-\e[1;31m#  #\e[0m-c-\e[1;31m#  #\e[0m-def-\e[1;31m#  #\e[0m# seems to do substitution,but $/ is empty and color not shown;Use of Nil in string context  in sub colorMatch at colorMatch.pl line 4\e[1;31m#  #\e[0m-12-\e[1;31m#  #\e[0m-3-\e[1;31m#  #\e[0m-4-\e[1;31m#  #\e[0m-567# seems to do substitution,but $/ is empty and color not shown; color1  color2 # both colors work and shown as expected,# color1 red and color 2 green; why inconsistent with above???a-12-b-3-c-4-def-567 # works,red colora-12-b-3-c-4-def-567 # works,green colora-12-b-3-c-4-def-567 # works,red colorNo such method 'prematch' for invocant of type 'Bool'  in sub colorMatch2 at colorMatch.pl line 17  in block <unit> at colorMatch.pl line 28
解决方法 这不是插值问题.字符类和范围的语法略有不同.你需要:

'text' ~~ / <[a..z]>+ /

至于你在bool上调用prematch()的其他错误,结果是False,因为在最终的递归级别,它不再匹配.在假设匹配之前,您需要检查结果.

最后,对于“在字符串上下文中使用Nil”,这是因为您使用的是Str.subst,并且与大多数语言中的大多数函数调用一样,在函数开始之前会对参数进行求值.你在参数中使用$/,但它还没有设置,因为函数的主体甚至没有开始执行. s / match / replacement /运算符不会遇到这种困难,所以我建议你将代码更改为:

$aStr ~~ s:g/(<$aRegex>)/$acolor# $/ #$colorOff/;

(或者为了更好的可读性:)

$aStr ~~ s:g {(<$aRegex>)} = "$acolor# $/ #$colorOff";

这假设您已将$aRegex变为正则表达式而不是字符串.此外,由于新代码修改了$aStr,您需要将$aStr更改为$aStr是函数签名中的副本.

总结

以上是内存溢出为你收集整理的perl6有色匹配,一些正则表达式插值有效,有些则没有;颜色代码不一致全部内容,希望文章能够帮你解决perl6有色匹配,一些正则表达式插值有效,有些则没有;颜色代码不一致所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1213497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存