Teil eines Strings auslesen / reguläre Ausdrücke?
Patrick
- php
Hallo ihr,
ich stehe total auf dem Schlauch, weil ich an einer Variante hake Bilder in einem Textarea einzubauen und danach entsprechend zu verarbeiten.
<?php
// Aus diesem String soll 'dieses_bild.gif' extrahiert werden bzw. einer Variablen zugeordnet werden, um zu überprüfen, ob das Bild auch vorhanden ist und ggf. die Größe zu ermitteln.
$string = "[bild]dieses_bild.gif[/bild]";
?>
Ich bin mir ziemlich sicher, dass dies recht einfach möglich ist, nur finde ich keine Funktion, die mir tatsächlich effektiv weiterhilft. Ich bin mir ebenfalls sicher, dass man dies recht gut über reguläre Ausdrücke lösen könnte. Doch je öfter ich mir die Handhabung durchlesen, desto weniger kapiere ich - irgendwie ein Buch mit sieben Siegeln. Ich verstehe zwar einigermaßen fertige Zeichenschemen, aber selbst schreiben klappt irgendwie nicht.
Kann mir jemand helfen?
Gruß Patrick
Moin!
Du willst alles zwischen [bild]und[/bild]? Ich nehme an, das darf mehrfach vorkommen? Das verkpompliziert es etwas
$string='[bild]und[/bild]'; #string
$iPosition=0; #integer für Stelle, ab der gesucht werden soll
$asFunde; #Array von Strings für die Funde
$bEnde=FALSE; #boolean: Fertig?
while ($bEnde==FALSE;) {
$suche_in=substr($string,$iPosition);
if(ereg('[bild](.{*})[/bild]', $suche_in, $regs)){
$asFunde[]=$regs[1]; # 1, zählt bei Wertzuweisung selbst hoch!
#Position des Endes der Fundstelle als neuen Start festlegen
$iPosition+=strstr($suche_in, '[/bild]');
}else{
$bEnde=TRUE;
}
}
Kann mir jemand helfen?
ist ungetestet.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Tag Patrick.
// Aus diesem String soll 'dieses_bild.gif' extrahiert werden bzw. einer Variablen zugeordnet werden, um zu überprüfen, ob das Bild auch vorhanden ist und ggf. die Größe zu ermitteln.
$string = "[bild]dieses_bild.gif[/bild]";
Versuche zuerst, den String in seine Bestandteile zu zerlegen:
1. [bild] - muss sein, kann sich nicht ändern
2. Grafik-URL - kann alles mögliche sein
3. [/bild] - wie 1.
Jetzt das Ganze in "RegExp-Sprache" übersetzen (es gibt eigentlich nur ein paar Regeln). Denke daran, dass bestimmte Zeichen reserviert sind, die musst du mittels Backslash maskieren. Das ergibt bis hierher:
1. "[bild]"
3. "[/bild]"
Jetzt musst du dir noch den Teilausdruck merken, der die Grafik-URL enthält. Den Ausdruck selber kann man zunächst (im Vertrauen auf die Intelligenz der Nutzer) ganz allgemein halten, er kann nämlich ein beliebiges Zeichen beliebig oft enthalten, dabei soll der Ausdruck beim nächsten Vorkommen von 3. enden (siehe gierige und genügsame Suchmuster):
2. (.+?)
Am Mittelteil solltest du noch etwas feilen, da sonst zuviel Müll drinstehen könnte, Stoff zum Nachlesen hast du ja jetzt :-) Das ganze mit den nötigen Modifiern versehen und in einer entsprechenden PHP-Funktion (z.B. preg_match) eingesetzt, sollte eigentlich funktionieren.
Siechfred
Hallo Siechfred,
joah.. dann werd ich jetzt mal wieder lesen ;-) Aber soweit schonmal vielen dank! Was den Müeel angeht, habe ich dort schon entsprechende Vorbereitungen getroffen. Das Bild wird nach dem Upload (ist nur ein interner Bereich für eine Person für die Änderung eigener Daten auf dessen Seite) entsprechend umbenannt und insofern muss ich dort eigentlich nur den Dateinamen selbst einbauen.
Nochmals danke für deine ausführliche und mühevolle Antwort!
Gruß Patrick
Hallo Siechfred,
auch jetzt sind reguläre Ausdrücke noch sieben Siegel. Aber ich hab mir ne Wurschtel-Funktion geschrieben, ehrlich zugegeben, die das schafft, was ich erreichen wollte. Allerdings mit einem Haken. Ich finde partou nicht heraus, wie viele Bilder in einem Text stecken, obwohl man dafür eigentlich nur die vorhanden Tags zählen müsste und schauen sollte, ob diese auch bzw. überhaupt geschlossen werden. Leider funktionieren bisher alle Varianten mit preg_match oder anderen Funktionen nicht, um herauszufinden, wie oft Bilder vorkommen. Hast du hier auch noch nen Tipp?
Gruß Patrick
echo $begrüßung;
$string = "[bild]dieses_bild.gif[/bild]";
Gehe ich recht in der Annahme, dass [bild] nicht das einzige Stück BBCode ist, das du auswerten willst? Schau dir mal Christian Seilers BBCode-Parserklasse für PHP an.
echo "$verabschiedung $name";
Hallöchen, doch, ist das Einzige, was eingebunden werden soll. Geht nur darum, dass die Person ein, zwei, drei oder mehr Bilder in einen Text mit einbauen kann.
Gruß Patrick