如何在 Rascal 中构建多个正则表达式匹配列表?

How can I build a list of multiple regex matches in Rascal?

我有一个包含大量文本的 str 值,我将其与正则表达式进行匹配。 str 包含正则表达式的多个匹配项,但当然我只得到第一个。 我如何枚举其他匹配项,更好的是,我如何将它们收集到 list[str] 中? 示例:

str text = "hello here how home";

现在我可以做到:

if (/<match:h+>/ := text) println(match);

打印第一个匹配项:hello。 现在,相反,我想将所有匹配项收集到 list[str] 中。其他语言为全局匹配提供了 g 标志。 Rascal 的成语是什么?

一般来说,您可以迭代一个模式,直到没有新的匹配为止。

for (/<match:h+>/ := "hello here how home") {
   println(h);
}

[ h | /<match:h+>/ := "hello here how home"]

反之亦然,如果你想知道列表中是否至少有一项:

if (_ <- lst) {
   println("lst is not empty");
}

在导师中阅读有关 Pattern Matching and Enumerators 的更多信息。

如果您想匹配您可能需要更改正则表达式的单词:/<word:h\w+>/