Соответствие регулярных выражений и вложенные элементы

У меня есть код регулярного выражения:

<!--\s?BEGIN (\w+) \s?-->(.*?)<!--\s?END \w+\s?--> 

Что будет соответствовать

 <!-- BEGIN some_functional_name --> //some stuff here later <!-- BEGIN some_functional_name --> 

Мне нужно следить за вложенными комментариями и если имена совпадают. Например

 <!-- BEGIN some_functional_name --> //some stuff here later <!-- BEGIN another_functional_name --> //it'll match up to the below end another_functional_name <!-- END another_functional_name --> <!-- END some_functional_name --> 

Поскольку вы можете видеть, что оно вложенное, но в регулярном выражении будет записан второй последний комментарий END который BEGIN и END не совпадают. Есть ли способ получить встроенные группы захвата регулярных выражений?

Пример:

  <!--\s?BEGIN (\w+) \s?-->(.*?)<!--\s?END $1\s?--> 

Хотя я также не знаю, как обращаться с гнездом? Должен ли я использовать положительный отзыв или что?