Первая проблема заключается в том, что .
обычно не соответствует новой строке. Таким образом, (.*)
будет соответствовать только до конца строки. Вы можете решить эту проблему, добавив к регулярному выражению префикс (?s)
, который устанавливает флаг DOTALL .
Вторая проблема в том, что .*
- это жадный , то есть он сожрет как можно больше. Таким образом, он получит все символы после первого START
, за которым следуют все символы до последнего END
. Чтобы сделать его не жадным, измените его на .*?
, чтобы он собирал символы после первого START
и перед первым END
.
С этими изменениями ваш оператор будет выглядеть следующим образом:
${m} Get Regexp Matches ${txt} (?s)START(.*?)END 1
Это приведет к двум совпадениям (разделены для ясности):
:\nline1\nline2\nline3\nline4\n
\nline a\nline b\nline c\n
Если вам не нужны символы новой строки, вам нужно будет еще немного обработать данные.