Linuchs: wie wird aus //kursiv// <i>kursiv</i> ?

Beitrag lesen

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