Я думаю, что это то, что вы пытались со своим вторым регулярным выражением:
Updated\s++(?>(?!Updated\b|end\b)\S+\s+)*+end\b
Другими словами, сопоставьте Updated
и найдите соответствующий end
. Если вы сначала найдете другой Updated
, вы знаете, что начали не в том месте, так что отмените этот матч. Я также исключил end
, потому что это позволяет мне притяжательно сопоставлять слова (то есть с *+
); регулярное выражение никогда не должно возвращаться, чтобы найти или (что более важно) устранить совпадение.
Если вам действительно нужно указать часть look[nnn]
, это должно сработать:
Updated\s++(?>(?!Updated\b|end\b|look\[\d+\])\S+\s+)*+look\[\d+\]\s+end\b
Добавьте флаг i
для нечувствительного к регистру соответствия, если вам нужно, но вам не нужны флаги m
или s
. Если это кажется слишком сложным, это потому, что я не знаю ваши данные так же хорошо, как вы. Есть хороший шанс, что это все, что вам действительно нужно:
Updated(?:(?!Updated).)*\send