Hallo Rolf,
dieses Regex habe ich nie verstanden. Es scheitert schon daran, mit preg_replace aus //kursiv//
<i>kursiv</i>
zu machen, der Schrägstrich weigert sich, maskiert zu werden, wird also nicht erkannt und nicht umgesetzt:
$search = array (
"**" // fett
,"//" // kursiv
,"__" // unterstrichen
);
$replace_1 = array (
"<b>" // fett
,"<i>" // kursiv
,"<u>" // unterstrichen
);
$replace_2 = array (
"</b>" // fett
,"</i>" // kursiv
,"</u>" // unterstrichen
);
// den gesamten Text nacheinander nach allen Suchbegriffen $search durchsuchen
for ( $i=0; $i < count($search); $i++ ) {
// 1., 2., .. n. Suchbegriff
$arr = explode ( $search[$i], $text ); // Formatierungs-String $search[$i] trennt
// Formatierungs-String muss paarig sein count also ungerade: [Text **fett** Text **fett**] count=5
while ( count($arr) > 2 && count($arr) % 2 != 0 ) {
if ( $search[$i] == "**" ) $such = "\*\*"; // ** maskieren
else if ( $search[$i] == "//" ) $such = "//";
// else if ( $search[$i] == "//" ) $such = "\/\/"; // // maskieren
// else if ( $search[$i] == "//" ) $such = "\057\057"; // oktal
// else if ( $search[$i] == "//" ) $such = "\x2F\x2F"; // hex
$text = preg_replace( "/".$such."/", $replace_1[$i], $text, 1 ); // nur einen ersetzen, nacheinander den 1. 3. 5. ...
$text = preg_replace( "/".$such."/", $replace_2[$i], $text, 1 ); // nur einen ersetzen, den 2. 4. 6. ...
$arr = explode ( $such, $text ); // Suchbegriff auf das naechste Vorkommen setzen
}
}
Da es bei **fett**
und __unterstrichen__
klappt, scheint das Konzept doch okay zu sein.
Linuchs