如何在 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+>/
我有一个包含大量文本的 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+>/