Вы, кажется, используете функции регулярных выражений, такие как lookbehind и lookahead, когда они вам действительно не нужны. Попробуйте:
\[DATA\s+\d+\](.*?)\[END DATA\]
В этом регулярном выражении есть только одна группа захвата, (.*?)
. После этого искомый результат должен быть в группе захвата 1.
Также обратите внимание, что я использовал не жадное совпадение .*?
, которое будет соответствовать до первого следующего экземпляра [END DATA]
Без этого, если вы используете только .*
, вы захватите все до последний [END DATA]
.