Boeing747: Problem mit eregi_replace

Ich möchte gerne dass Zeichen _ so interpretieren das das erste <b> bedeutet und das zweite </b>.
Da ich nirgends die Syntax von ereg_replace finden kann,
kann mir jemand diese mal zeigen?
Wäre sehr nett. Danke!

  1. Hallo!

    Ich möchte gerne dass Zeichen _ so interpretieren das das erste <b> bedeutet und das zweite </b>.
    Da ich nirgends die Syntax von ereg_replace finden kann,
    kann mir jemand diese mal zeigen?

    Also: Zum einen solltest Du nicht ereg_replace nehmen, sondern preg_replace (ist schneller, binärsicher und kann mehr). Zum anderen gibt es die Dokumentation zu regulären Ausdrücken mit preg_* unter http://de3.php.net/manual/de/pcre.pattern.syntax.php zu finden (leider nur auf Englisch).

    Zu Deinem Problem: Du suchst den Pattern /_([^_]+)_/. In PHP sähe das so aus:

    $string = preg_replace ('/_([^_]+)_/', '<b>$1</b>', $string);

    Alles nähere erfährst Du wie gesagt im Manual.

    Viele Grüße,
    Christian

    1. $string = preg_replace ('/_([^_]+)_/', '<b>$1</b>', $string);

      Vielen Dank!

      Gibts diese funktion in jeder PHP-Version?
      Das sie ja aus Perl übernommen wurde.

      1. $string = preg_replace ('/_([^_]+)_/', '<b>$1</b>', $string);

        Ergibt fehler:

        Warning: Compilation failed: nothing to repeat at offset 0 in chatin.php on line 15

        ???

        1. Hallo,

          $string = preg_replace ('/_([^_]+)_/', '<b>$1</b>', $string);
          Ergibt fehler:

          Warning: Compilation failed: nothing to repeat at offset 0 in chatin.php on line 15

          Was für eine PHP-Version hast Du? Die Fehlermeldung erscheint mir *arg* seltsam...

          Viele Grüße,
          Christian

          1. php4 habe ich.
            Mit
            <?php $text=preg_replace("/_(.*?)_/","<b>$1</b>",$text); ?>
            geht's!
            Bloß funzt es nicht ,wenn ich nur am anfang ein _ mach und der rest des textes fett werden soll.
            Und wenn ich leerzeichen vor dem text mache, soll er es normal anzeigen ohne dass er _ fett _ schreibt mit leertasten zwischen.
            Geht das auch?

            1. Hallo du da draußen,

              <?php $text=preg_replace("/_(.*?)_/","<b>$1</b>",$text); ?>
              Bloß funzt es nicht ,wenn ich nur am anfang ein _ mach und der rest des textes fett werden soll.
              Und wenn ich leerzeichen vor dem text mache, soll er es normal anzeigen ohne dass er _ fett _ schreibt mit leertasten zwischen.

              if(substr($text, 0, 1) == "_")
                $text = "<b>".$text."</b>";
              else
                $text = preg_replace("/_(.*?)_/e", "'<b>'.trim($1).'</b>'", $text);

              Das "e" hinter dem regulären Ausdruck lässt den Code im String ausführen.

              Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de/),
              Candid Dauth (Dogfish)

              --
              Selten Dumme sind nicht selten, aber dumm.
              http://dogfish.net.tc/
  2. Hallo,

    Ich möchte gerne dass Zeichen _ so interpretieren das das erste <b> bedeutet und das zweite </b>.

    meinst du sowas:
      preg_replace("/_(.*?)_/","<b>$1</b>",$str);
    ?

    Da ich nirgends die Syntax von ereg_replace finden kann,

    http://de.php.net/preg_replace?

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hallo Tobias,

      preg_replace("/_(.*?)_/","<b>$1</b>",$str);

      das ist vom Ergebnis her identisch mit meiner Lösung, verbraucht allerdings deutlich mehr Rechenzeit.

      Viele Grüße,
      Christian

      1. Hallo Christian,

        preg_replace("/_(.*?)_/","<b>$1</b>",$str);
        das ist vom Ergebnis her identisch mit meiner Lösung, verbraucht allerdings deutlich mehr Rechenzeit.

        warum (ich vermute, dass du recht hast, würde nur gerne wissen, warum :-))? Lieg es an '[^_]+' <-> '.*?' oder an ' <-> "?

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hallo Tobias,

          preg_replace("/_(.*?)_/","<b>$1</b>",$str);
          das ist vom Ergebnis her identisch mit meiner Lösung, verbraucht allerdings deutlich mehr Rechenzeit.
          warum (ich vermute, dass du recht hast, würde nur gerne wissen, warum :-))? Lieg es an '[^_]+' <-> '.*?'

          Daran. [^_] ist deutlich einfacher zu realisieren (einfach beim ersten _ aufhören), als .*?_. Bei zwei Zeichen als Begrenzung geht das natürlich nicht mehr, aber bei einem Zeichen ist das mit invertierten Zeichenklassen besser.

          Viele Grüße,
          Christian

          1. ´dein tipp auf der anderen antowrt hat mir zwar geholfen
            aber welcher befehl fürt es so aus, dass wenn ich nur ein _ habe
            der rest des textes fett wird?

          2. Hallo Christian,

            preg_replace("/_(.*?)_/","<b>$1</b>",$str);
            das ist vom Ergebnis her identisch mit meiner Lösung, verbraucht allerdings deutlich mehr Rechenzeit.
            warum (ich vermute, dass du recht hast, würde nur gerne wissen, warum :-))? Lieg es an '[^_]+' <-> '.*?'
            Daran. [^_] ist deutlich einfacher zu realisieren (einfach beim ersten _ aufhören), als .*?_. Bei zwei Zeichen als Begrenzung geht das natürlich nicht mehr, aber bei einem Zeichen ist das mit invertierten Zeichenklassen besser.

            danke für den Hinweis, werde ich mir merken :-)

            Grüße aus Nürnberg
            Tobias

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|