hier mal mein entwurf so aus m kopf raus, etwas kürzer:
$text = preg_replace("/[i](.*)[/i]/s", "<em>'$1'</em>",$text);
bin auch kein profi, aber wenn nciht grade n typo drinne ist, funktioniert das auch. /s damits auch über mehrere zeilen hinweg funktioniert. klammern um .* weil wir das ja extra brauchen ($1)
/([i]) <-- da brauchste keine klammern drum, willst das [i] ja später nicht ansprechen, nur was dazwischen steht
([^([|])]*) <-- hmm da sehe ich atm keinen sinn drinne, was willst du damit bezwecken?
([/i])/ <-- analog zu ([i])