Przykładu Ci nie podam, ale dam do zastanowienia kilka faktów i przemyśleń.
1. Zauważ za co odpowiadają przecinki,
2. Zauważ za co odpowiadają nawiasy,
3. Zauważ za co odpowiadają myślniki.
ad 1) Służy do oddzielenia liczb lub ich grup. Jeśli zrobimy dzielenie (explode) ciągu po nim to mamy rozbite to ładnie za jednym wyjątkiem (o nim za chwilę).
ad 2) Nawiasy służą za określenie czegoś różnego od części wspólnej która jest przed nim.
ad 3) Myślniki dają nam zakres od, do pewnych liczb.
Jaki jednak jest wyjątek dla podpunktu 1? Sam go masz w przykładzie. Bezmyślny explode dla
8(1-5, 7-8) stworzy głupotę. Musisz kontrolować jego działanie. Jak? Najprostszy sposób to kontrola liczby otwartych i zamkniętych nawiasów za pomocą substr_count w pojedynczym elemencie tablicy utworzonym pierwszym explode po przecinku. W sumie problem da się rozwiązać na 2 sposoby. Pierwszy kombinowaniem z explode i drugi bez jego użycia (z analizą stringa). Każdy z nich ma swoje wady i zalety.
Jak działało by każde z rozwiązań?
1) Użycie explode.
a) explode stringa po przecinku,

trim wszystkich elementów nowej tablicy,
c) sprawdzenie czy element tablicy ma równą liczbę nawiasów otwierających i zamykających:
c1) nie - dołączamy element bezpośrednio za nim się znajdujący i ponownie sprawdzamy go
c2) tak - z tego co przed nawiasem tworzymy bazę
d) jeśli obu typów nawiasów brak idziemy do f), jeśli coś jest - tworzymy zeń dodatek
e) sprawdzamy czy jest w tym dodatku przecinek. Jeśli tak to znów rozbijamy, niejako na nowo od punktu 1 tworząc rekurencję
f) sprawdzamy istnienie myślnika. Jeśli jest wypisujemy element od startu zakresu(liczba sprzed myślnika) do końca zakresu(liczba po myślniku) dokładając z przodu bazę.
Warto tu zauważyć, że myślni może być zarówno na poziomie podstawowym jak i zagłębionym. Poza tym całość może być zagnieżdżona wielokrotnie. Może mój opis nie jest super dokładny, ale chyba łatwo zauważyć co i jak.
2) Analiza stringa wejściowego
Tutaj nie będę się bardzo rozpisywał bo zadanie to mniej więcej podobne do stosu. Przechodzimy po kolejnych elementach ciągu i w zależności od tego czy wykryjemy jakiś nawias (otwarcie bądź zamknięcie), przecinek lub myślnik - reagujemy odpowiednio. Krótko mówiąc:
a) czyszczenie stosu

pobieranie cyfr aż do odczytania sterującego (spacje ignorujemy)
c) zapisujemy to jako bazę.
d) jeśli to myślnik pobieramy następne elementy aż do odczytu kolejnego znaku sterującego. To co pomiędzy bazą i owym drugim, wywalamy w pętli.
UWAGA! To już może mieć miejsce na którymś poziomie zagłębienia, więc trzeba wiedzieć, czy nie trzeba będzie dodać bazy bazy

Od tego służy kontrola otwartości i zamknięcia nawiasów.
e) jeśli to przecinek to wypisujemy bazę i czyścimy stos tego poziomu zagłębienia
f) jeśli to nawias otwierający, wchodzimy na poziom zagłębienia nowy (nowy stosik),
g) jeśli to nawias zamykający, likwidujemy stos tego zagłębienia.
To jest trudne do zrozumienia, ale wyjaśnię na Twoim przykładzie 308(2-4), 5, 6, 7(2-9), 8(1-5, 7-8)
Lecimy cyfry aż pojawia się 308 i nawias otwierający. OK. Zapisujemy bazę 308 i bierzemy 2 jako nowy stos. Po dwójce wbija się myślnik, więc zapisujemy 2 jako bazę i lecimy aż do następnego kontrolnego, czyli zamykającego nawiasu. bierzemy cyfry od 2 do 8 i dowalamy do tego wstępną bazę 308. Gdy skończone analizujemy, a że nawias zamykający likwidujemy stos dla 2-8. Idziemy dalej i mamy przecinek. Czyszczenie. 308 idzie w piach. Teraz dostajemy 5. Spotykamy sterujący zapisujemy 5. Mamy przecinek wypisujemy więc 5 jako bazę i czyścimy. Z 6 podobnie. Sytuacja dla 7(2-9) ma się podobnie jak dla 308(2-4). Fajny jest ostatni element, bo jest przecinek w grupowaniu. I całość zadziała jako mix wcześniejszych. Weźmie 8 jako bazę. Utworzy nowy stosik dla 1-5, wypisze zakres. Zniszczy ten mały stosik (ale nadal będzie pamiętać 8 jako bazę, bo nie napotkał nawiasu zamykającego! ), potem zrobi dla 7-8 i dopiero się zakończy faktycznie.
Poczytaj i przemyśl

EDIT: Nie dodałem, z oczywistych względow, że jeśli napotka na koniec stringa to ma potraktować go jak przecinek. Oczywiście zabezpieczenia w tym 2 przypadku też muszą istnieć. By nie analizował czegoś bezsensownie, a potem w połowie się wysypuje bo mu choćby nawiasów brakuje lub liczby po myślniku. Ale zabezpieczenia skryptu to już Twoje zmartwienie