Hallo Linuchs,
du musst das / ebenfalls maskieren, weil es der Regex-Delimitier ist. Ansonsten entsteht für preg_replace als erster Parameter der String "////", was eine leere Regex gefolgt von zwei unbekannten Optionszeichen ist. Das Ergebnis ohne Maskierung sollte wie folgt lauten:
Warning: preg_replace(): Unknown modifier '/' in ... on line 4
Darüber hinaus solltest Du beachten, dass ein String in doppelten Anführungszeichen bereits auf PHP Ebene eine Backslash-Interpretation enthält. Eine Regex "[aeiou].*\1"
würde scheitern, weil \1 nicht als Back Reference, sondern als Zeichen mit Code 1 interpretiert wird. Entweder musst Du alle Backslashes doppeln, oder Patterns in einfache Anführungszeichen setzen.
Aber prinzipiell halte ich deinen Algorithmus für fehlerhaft. Was passiert bei
„Ein **Ring, sie zu __knechten**, sie alle__ zu finden“
Das Kramdown im Forum macht daraus
„Ein Ring, sie zu __knechten, sie alle__ zu finden“
also:
„Ein <b>Ring, sie zu __knechten</b>, sie alle__ zu finden“
D.h. das __
zwischen den **
wird als unpaarig erkannt und ignoriert. Du machst das nicht; ich würde vermuten, dass Du dieses (fehlerhafte) HTML generierst:
„Ein <b>Ring, sie zu <u>knechten</b>, sie alle</u> zu finden“
Ich habe im Moment zu wenig Zeit für einen Alternativvorschlag - das wird bis morgen dauern - aber ich denke, dass man mit sinnvollen Regexen deine Explode-Technik verbessern kann.
Rolf
sumpsi - posui - clusi