Смысл части [??????]+
состоит в том, чтобы соответствовать любому тексту, который не соответствует символу, который равен или является начальной точкой разделителей.
Итак, в вашем случае вам нужно сопоставить любой символ, кроме символа, который начинается с подстроки begin
или end
:
/begin(?>(?!begin|end).|(?R))*end/gs
См. Демоверсию regex
.
здесь будет соответствовать любому символу, включая символы разрыва строки из-за модификатора s
. Обратите внимание, что фактическая реализация может нуждаться в корректировке (например, в PHP модификатор g
не должен использоваться, поскольку для этого есть специальные функции / функции).
Кроме того, поскольку вы просматриваете весь шаблон, вам не нужны внешние скобки.