代码之家  ›  专栏  ›  技术社区  ›  lisprogtor

perl6如何在正则表达式插值中使用连接?

  •  6
  • lisprogtor  · 技术社区  · 6 年前

    say "12345" ~~ m/ <{ (2,3,4).any }> /
    Cannot resolve caller MAKE_REGEX(Int, Bool, Bool, Int, PseudoStash); none of these signatures match:
    
    say "12345" ~~ m/ $( (2,3,4).any ) /
    This type cannot unbox to a native string: P6opaque, Junction
    

    此错误消息是否意味着不能在正则表达式插值中使用连接?

    我的工作是

    say "12345" ~~ m/ <{ (2,3,4).join("||") }> /
    ï½¢2ï½£
    

    如何在正则表达式插值中使用连接?

    1 回复  |  直到 3 年前
        1
  •  10
  •   raiph    6 年前

    有时我有一个很长的列表,我想检查字符串是否与列表中的任何内容匹配。

    my @list = <bar bartoo baragain>;
    say 'bartoo' ~~ / @list /;                         # ï½¢bartooï½£
    say 'bartoo' ~~ / <{<bar bartoo baragain>}> /;     # ï½¢bartooï½£
    

    请注意,默认情况下,您将获得最长的匹配令牌。

    我试图在正则表达式中插入一个连接。它们都是错误。。。此错误消息是否意味着不能在正则表达式插值中使用连接?

    我认为是这样。(错误信息可能是LTA。)连接是主要P6语言的一个功能。模式匹配似乎是合理的 DSL 不支持他们。

    say "12345" ~~ m/ <{ (2,3,4).join("||") }> /
    ï½¢2ï½£
    

    如果你用一个双管连接( ||

    say 'bartoo' ~~ / <{'bar || bartoo || baragain'}> /; # ï½¢barï½£
    say 'bartoo' ~~ / ||@list /;                         # ï½¢barï½£
    say 'bartoo' ~~ / ||<{<bar bartoo baragain>}> /;     # ï½¢barï½£
    

    为这些构件指定管道符号与指定单个管道符号相同( | )并匹配最长的匹配令牌:

    say 'bartoo' ~~ / <{'bar | bartoo | baragain'}> /; # ï½¢bartooï½£
    say 'bartoo' ~~ / |@list /;                        # ï½¢bartooï½£
    say 'bartoo' ~~ / |<{<bar bartoo baragain>}> /;    # ï½¢bartooï½£
    

    你以前问过相关的问题。为了方便起见,我将在此处添加几个链接: