提问者:小点点

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


假设我有一个SupplyChannelIO::Handle或类似的类似流的文本源,我想扫描它以查找与正则表达式匹配的子字符串。我不能确定匹配的子字符串不会跨越块边界。总长度可能是无限的,不能被吞入内存。

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

这可能吗?


共1个答案

匿名用户

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

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}";
  }
}

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