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

时间:2015-12-07 22:19:36

标签: regex rascal

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

str text = "hello here how home";

现在我能做到:

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

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

1 个答案:

答案 0 :(得分:3)

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

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

[ h | /<match:h+>/ := "hello here how home"]
如果你想知道列表中是否至少有一个项目,反之亦然:

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

详细了解导师中的Pattern MatchingEnumerators

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