当前位置: 首页 > 知识库问答 >
问题:

在Perl 6中过滤匹配两个正则表达式的元素

刘阳荣
2023-03-14

这里发生了一些我不太明白的事情。

> my @arr = <ac bc abc>
> @arr.grep: (( * ~~ /a/ ) && ( * ~~ /b/ ))
(bc abc)

但是

> @arr.grep(* ~~ /a/).grep(* ~~ /b/)
(abc)

是什么原因?

共有1个答案

万俟嘉珍
2023-03-14

你已经想出了完美的解决方案。

另一种可能是:

my @arr = <ac bc abc>
@arr.grep: { $_ ~~ /a/ && $_ ~~ /b/ }
(abc)

这个答案的其余部分只是解释了这个问题。这个问题中的问题是WhateverStar涵盖的问题的更复杂版本

如果它们是代码,逻辑操作不会执行它们的参数。

所以{$_~~ /a/}

或<代码>* ~~ /a/

同时,如果是代码或正则表达式,grep会执行匹配器,因此这些都是相同的:

foo.grep: { $_ ~~ /.../ }
foo.grep:    * ~~ /.../;
foo.grep:         /.../;

您的连接解决方案似乎很自然。如果有人能解释一下我在下面缺少了什么,我会很高兴的。虽然我希望它能起作用,但我还是很想弄清楚它到底是如何工作的,但我认为这有点像(但不完全是):

>

  • <代码>foo

    试图使用连接作为参数调用grep。

    由于连接在正常的值层次结构之外,大多数例程没有匹配的签名<代码>grep不会。

    当您调用一个例程并且没有相应的签名时,初始调度失败,我们遇到了一个调度回退处理程序。这可能是方法一。

    如果调度回退处理程序发现存在连接参数,则它将提取连接中的各个值,并触发与这些值相对应的逻辑并行“线程”(当前从未触发实际线程,但如果编译器认为这是一个好主意,则允许编译器使其成为真正的线程)。因此,它对invocant的每个元素调用两次grep,并将结果输出回与传入连接类型相同的新连接。

    在布尔上下文中,连接折叠为单个结果。

    (如果Junction处于整体布尔上下文中,那么它可以根据结果(并行)短路。如果它是一个any并且任何结果都来自True,那么它可以取消其余部分——或者如果它实际上是按顺序做事,则不首先执行它们,就像目前的情况一样。如果它是一个all并且任何结果都来自False,它可以取消其余部分。等等。)

  •  类似资料:
    • Perl6正则表达式匹配连接 它为False,因为连词中的“23”与$a中的“23”子字符串匹配,但此子字符串与连词中的“ef”不匹配。这有点违反直觉,因为它更容易解释$a ~~ m/23 如果我有n个正则表达式,我想看看是否所有这些n个正则表达式都匹配相同的整个字符串,而不是匹配整个字符串的相同子字符串部分,那么编写perl6表达式的最佳方法是什么? 在例子中,我真的想做 如果正则表达式的数量很

    • 我的输入只能有两个值或。我可以使用什么正则表达式来确保这两个单词中的任何一个都已提交?

    • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

    • 我们得到了一些这样的内容:

    • 问题内容: 我想在特定字符串中匹配正斜杠或反斜杠,例如: 1. 2. 3. 4. 在给定的字符串中,不应匹配最后一个记录,因为它不包含或。 我在用什么 这仅适用于正斜杠。我不知道如何为两个斜杠写正则表达式(条件)。 问题答案: 您要匹配的“字符”为: 先为字符串复制反斜杠,然后再为正则表达式复制。 当您需要在也使用反斜杠转义字符串的语言中使用反斜杠时,这可能是最讨厌的正则表达式。 Java编译器会

    • 主要内容:基本模式匹配,字符簇,确定重复出现基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: 这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。例如该模式与字符串 "once upon a time" 匹配,与 "There once was