Problem mit eregi_replace
Boeing747
- php
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!
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
$string = preg_replace ('/_([^_]+)_/', '<b>$1</b>', $string);
Vielen Dank!
Gibts diese funktion in jeder PHP-Version?
Das sie ja aus Perl übernommen wurde.
$string = preg_replace ('/_([^_]+)_/', '<b>$1</b>', $string);
Ergibt fehler:
Warning: Compilation failed: nothing to repeat at offset 0 in chatin.php on line 15
???
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
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?
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)
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
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
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
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
´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?
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