Что ж, если вы гарантируете, что за каждым начальным тегом следует конечный тег, будет работать следующее
\[start\](.*?)\[end\]
Однако, если у вас сложный текст, такой как следующий:
[start] sometext [start] sometext2 [end] sometext [end]
тогда у вас возникнут проблемы с регулярным выражением.
Теперь следующий пример вытянет все горячие ссылки на странице:
'/<a(.*?)a>/i'
В приведенном выше случае мы можем гарантировать, что не будет вложенных случаев:
'<a></a>'
Итак, это сложный вопрос, и его нельзя решить простым ответом.