wie wird aus //kursiv// <i>kursiv</i> ?
bearbeitet von Rolf BHallo 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:
~~~html
„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:
~~~html
„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