为 Raku 插入的条件代码正则表达式

The inserted conditional code regex for Raku

如何在 Raku 正则表达式中插入条件代码正则表达式
类似于它的 Perl 正则表达式

 my $F = 1;
 'foobarbar' =~ / (?(?{  $F  }) foo |  bar ) bar /x  ;

辛苦了一天,请指教,谢谢

这会起作用:

my $F=1
'foobar' ~~ / ^^ "{ $F ?? "foo" !! "bar" }" bar /; # 「foobar」
$F=0
'foobar' ~~ / ^^ "{ $F ?? "foo" !! "bar" }" bar /; # Nil

正则表达式中的代码块将是 运行,但除非您将它们显式转换为字符串(通过引号),否则它们将被丢弃。

快速回答

my $F = 1;
'foobarbar' ~~ / (<?{  $F  }> foo |  bar ) bar /  ;
say $/; # use `say` to get a "human friendly" `gist` of a value

显示:

「foobar」
 0 => 「foo」

鉴于:

my $F = 0;
'foobarbar' ~~ / (<?{  $F  }> foo |  bar ) bar /  ;
put $/; # use `put` to get a simple computer stringification of a value

显示:

barbar

更快的回答

Please help out after tried so hard a day to no avail, thanks.

非常欢迎您继续在这里就 SO 提问。我们将尽最大努力在您提出问题的当天作出答复,您提出的问题和我们提供的答案将对每个人都有帮助。所以,感谢您的询问,并让他们来。也就是说,有 很多 更快的方法来获得答案,而且它们通常比我们在这里提供的答案更好:

  1. “聊天”(即使你不喜欢参与real-time讨论,仍然阅读聊天记录 下面。)

    如果你喜欢real-time讨论,有IRC、Discord等频道。

    您可以提问或回答问题,或者更一般地说 enjoy yourself, in real-time, right now, by clicking web page that will take you to the #raku-beginners IRC channel 访问 Raku 菜鸟“聊天”频道。如果附近有浣熊(我们目前主要是居住在欧洲或美国的说英语的人,尽管未来几年希望会扩大),您通常会在几分钟内得到友好的参与。

    还有其他几个频道。单击下面的日志 link 查看列表。

  2. 聊天记录

    聊天频道(通常)是公开的 logged and searchable。十几个矿山,其中含有大约一百万颗未经加工的钻石——自 2005 年以来,Rakoons 和访客不断实时发表评论。

    出于许多目的,搜索这些日志 比谷歌搜索(通常无用)要丰富得多 。例如,在文档站点上搜索 \Q 的匹配项(具有 Raku 等效项的 Perl 转义符)列出了 50 个误报,仅 one true positive, whereas a search for \Q in the old Raku channel 显示了一长串匹配项,我对它们的简要回顾表明其中很多都很有用。

    搜索功能包括按昵称过滤。例如,a search for comments by TimToady (Larry Wall) containing the word macro.

    您甚至可以使用 Raku 正则表达式! (如果这样做,请考虑周到。例如,为避免超时,您可能需要将搜索分成多个提交,每个提交的时间跨度不超过 15 年。)

    总而言之,您不仅可以搜索将近二十年的 Rakoons 和非 Rakoon 访问者,他们会开出难以想象的可怕笑话,同时富有成效地讨论每一段代码(在 Raku 或任何其他 PL 中)以及任何人关心的每个 Raku 主题进行讨论,但也要精确搜索以保持高信噪比。

  3. Doc 如果您想搜索和阅读文档,请按照我下面的指南快速获得 doc.raku.org 中许多问题的答案,主要文档网站:

    • 搜索 文档站点的搜索框(网站右上角)比看起来更有用。您可能不知道要输入什么。即使您知道要输入什么,它也可能不在文档中。即使文档中 ,它也可能不包含在 drop-down 匹配列表中。但是您仍然应该尝试,因为在 drop-down 的最底部列出了一个经常被忽视的 “搜索整个站点”选项(在所有列出的匹配项之后)。

      例如,如果您在搜索框中键入 condition,然后 select“在整个站点中搜索 条件”条目,您您将在 google 看到的文档站点上看到匹配项。如果您随后浏览它们,您将看到 <?{condition}> yes-pattern | no-pattern 示例。 只需在搜索框中弹出 condition,您就可以在大约两分钟内找到问题的答案!

      顺便说一句,如果搜索 适合您,请随时提供有关您尝试和未能找到的内容的反馈。 (谢谢你。)

    • 阅读 有时搜索不会为您提供答案,但仍然值得阅读文档,因为您只是没有在搜索框中使用正确的词. 为了快速访问文档网站中与您的问题相关的最重要部分 -- 尤其是如何将另一个 PL 的知识转移到 Raku - - 单击文档站点顶部绿色区域中的 Language 一词。这会将您带到 Raku Language 选项卡,其中包含如下重要信息:

      • 有“语言 X 到 Raku”Migration guides that show how to do things in Raku that are equivalent to doing them in some other PL. You should definitely take advantage of The Perl to Raku guide. (We'd appreciate feedback about it too.) It's broken into six parts so far; you should start with the Perl to Raku guide - in a nutshell. In it you'll see a Special matchers generally fall under the <> syntax 部分;它提供了这个例子(稍作修改):

        (?{condition)) yes-pattern | no-pattern     # Perl
        becomes
        <?{condition}> yes-pattern | no-pattern     # Raku
        
      • 还有详细的语言参考信息。 语言 选项卡的 Fundamental topics section includes a Regexes page; in it you'll find a Regex Boolean condition check 部分包含一个完全专门用于您所询问内容的部分。

当然还有更多资源(尤其是 the old design speculation docs),但希望以上内容可以帮助您更快地找到许多问题的答案。祝你好运!