在Supply或其他类似流的序列上运行正则表达式



假设我有一个SupplyChannelIO::Handle或类似流的文本源,并且我想扫描它以查找与正则表达式匹配的子字符串。我不能确定匹配的子字符串是否与chunk boundaries交叉。总长度可能是无限的,不能被拖入内存。

一种可能的方法是,如果我可以实例化一个正则表达式匹配引擎,并在它保持状态的同时向它提供文本块。但我看不出有任何方法可以做到这一点——我只看到了运行匹配引擎直到完成的方法。

这可能吗?

经过更多的搜索,我可能已经回答了自己的问题。具体来说,Seq.comb似乎能够组合块并延迟处理它们:

my $c = supply {
whenever Supply.interval(1.0) -> $v {
my $letter = do if ($v mod 2 == 0) { "a" } else { "b" };
my $chunk = $letter x ($v + 1);
say "Pushing {$chunk}";
emit($chunk);
}
};
my $c2 = $c.comb(/a+b+/);
react {
whenever $c2 -> $v {
say "Got {$v}";
}
}

另请参阅用于构造此示例的并发特性。

最新更新