Rolf B: wie wird aus //kursiv// <i>kursiv</i> ?

Beitrag lesen

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