Как я могу создать список из нескольких совпадений с регулярными выражениями в Rascal?
У меня есть str
значение, содержащее достаточное количество текста, и я сопоставляю его с регулярным выражением. str
содержит несколько совпадений регулярного выражения, но, конечно, я получаю только первое. Как я могу перечислить по другим матчам, лучше, как я могу собрать их в list[str]
? Пример:
str text = "hello here how home";
Теперь я могу сделать:
if (/<match:h+>/ := text) println(match);
который печатает первый матч: hello
, Теперь вместо этого я хотел бы собрать все спички в list[str]
, Другие языки обеспечивают g
флаг для глобального соответствия. Какова идиома Раскала для этого?
1 ответ
В общем, вы можете выполнять итерацию по шаблону, пока не будет найдено новых совпадений.
for (/<match:h+>/ := "hello here how home") {
println(h);
}
или же
[ h | /<match:h+>/ := "hello here how home"]
обратное также верно, если вы хотите знать, есть ли хотя бы один элемент в списке:
if (_ <- lst) {
println("lst is not empty");
}
Подробнее о сопоставлении с образцом и счетчиках читайте в репетиторе.
Если вы хотите сопоставить слово, вам, возможно, придется изменить регулярное выражение: /<word:h\w+>/