Eigener bbCode... (preg_match_all!)

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
SoulReaver1989
Mitglied
Beiträge: 204
Registriert: 25.04.2004 13:24
Wohnort: Freiberg am Neckar
Kontaktdaten:

Eigener bbCode... (preg_match_all!)

Beitrag von SoulReaver1989 »

Also es geht um folgendes...
ich habe schon selber so nen Code à la bbCode programmiert
ich mach das über

Code: Alles auswählen

$content=preg_replace("/\[b\](.*?)\[\/b\]/si", "<b>\\1</b>", $content); 
$content=preg_replace("/\[i\](.*?)\[\/i\]/si", "<i>\\1</i>", $content); 
$content=preg_replace("/\[u\](.*?)\[\/u\]/si", "<u>\\1</u>", $content); 
Aber damit ersetze ich ja nur

Code: Alles auswählen

[b] mit <b>
oder so ähnlich!

Jedenfalls... möchte ich bilder einfügen... dazu möchte ich an den Bildernamen kommen und ihn in einer Variable haben also z.B.

Code: Alles auswählen

Input : [img=mypicture.jpg]
Verarbeitung: array_push($picnames, "$picname"); // $picname = mypicture.jpg;
Wie ermögliche ich eine solche Rückmeldung, dass ich aus "bbCode" Dinge "auslesen" kann?
Zuletzt geändert von SoulReaver1989 am 15.02.2005 18:43, insgesamt 1-mal geändert.
Langeweile?
Schick Feuer an die 112 und sofort stehen 20 lustige Leute mit roten Partyhüten vor deiner Tür!
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Wenn du anstatt einer Copy & Paste Aktion mal die Pattern Syntax von PHP lesen würdest, wüsstest du wie.........

Bachreferences sei dir genannt......

Was du ja auch in deinen vorherigen Beispielen bereits gemacht hast aber offentsichtlich nicht weisst was du gemacht hast :roll:
Benutzeravatar
SoulReaver1989
Mitglied
Beiträge: 204
Registriert: 25.04.2004 13:24
Wohnort: Freiberg am Neckar
Kontaktdaten:

Beitrag von SoulReaver1989 »

Blutgerinsel hat geschrieben:Wenn du anstatt einer Copy & Paste Aktion mal die Pattern Syntax von PHP lesen würdest, wüsstest du wie.........

Bachreferences sei dir genannt......

Was du ja auch in deinen vorherigen Beispielen bereits gemacht hast aber offentsichtlich nicht weisst was du gemacht hast :roll:
Sorry is ne doofe angewohnheit ;) Genauso wie mit meinen Backups - ich mach nie welche und reg mich drüber auf - aber dummheit muss bestraft werden :wink:

Ich hab mir jetzt diese Seite durchgelesen:
http://www.php-resource.de/tutorials/read/10/1/

Und bin nicht schlauer ;) Reicht es denn einfach im neuen String kein <img>-Blabla reinzuschreiben und dann hat man ja den String oder zieht die funktion preg_replace zu viel Ressourcen für solche Spässe?
Langeweile?
Schick Feuer an die 112 und sofort stehen 20 lustige Leute mit roten Partyhüten vor deiner Tür!
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Kommt darauf an auf was du matchen willst........

Interessiert dich primär ob es eine Url ist oder ob nur ein File im jpg oder gif oder whatever Format vorhanden ist?

Wenn du nur prüfen willst ob eine Bilddatei angehängt wurde und die Url haben willst dann reicht schon

Code: Alles auswählen

#\[(img)\](.*\.(gif|png|jpeg|jpg))\[/\1\]#is
Backreference \2 wäre hier die Url und \3 der Dateityp
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Eigener bbCode...

Beitrag von Pyramide »

SoulReaver1989 hat geschrieben:Jedenfalls... möchte ich bilder einfügen... dazu möchte ich an den Bildernamen kommen und ihn in einer Variable haben also z.B.

Code: Alles auswählen

Input : [img=mypicture.jpg]
Verarbeitung: array_push($picnames, "$picname"); // $picname = mypicture.jpg;
Wie ermögliche ich eine solche Rückmeldung, dass ich aus "bbCode" Dinge "auslesen" kann?
D.h. du möchtest als Ergebnis eine Liste aller Bilder haben? Das geht mit [php:preg_match_all]
KB:knigge
Benutzeravatar
SoulReaver1989
Mitglied
Beiträge: 204
Registriert: 25.04.2004 13:24
Wohnort: Freiberg am Neckar
Kontaktdaten:

Beitrag von SoulReaver1989 »

Code: Alles auswählen

$code = preg_match_all("/\[img\ desc=\"(.*?)\" embed=\"(.*?)\" auto=\"(.*?)\"\](.*?)\[\/img\]/si", 
   "[img desc=\"Hier sehen Sie XY mit XY\" embed=\"float\" auto=\"no\"]http://www.example.org/image.jpg[/img]", 
   $ausgabe, PREG_PATTERN_ORDER);
foreach($ausgabe[1] as $key => $value)
{
echo "$key - $value<br>";
}
Was habe ich hier an preg_match_all falsch verwendet?
Dieser Snippet gibt mir nur den Wert von desc="(.*?)" aus!
Ich weiss ich bliggs net ;)
Hat das was mit der Rückreferenzierung zu tun?
Oder wie hab ich den Artikel auf php.net falsch verstanden, dass ich auf so ein Ergebnis komme!
Langeweile?
Schick Feuer an die 112 und sofort stehen 20 lustige Leute mit roten Partyhüten vor deiner Tür!
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

php.net hat geschrieben:PREG_PATTERN_ORDER

Ordnet die Ergebnisse so an, dass $treffer[0] ein Array von Übereinstimmungen mit dem kompletten Suchmuster ist, $treffer[1] ein Array von Zeichenketten, die mit dem ersten eingeklammerten Teil-Suchmuster übereinstimmen und so weiter.
Ist in deinem Fall ist aber warscheinlich PREG_SET_ORDER besser, denn dann kannst du folgendes machen:

Code: Alles auswählen

preg_match_all(..., $ausgabe, PREG_SET_ORDER);
foreach($ausgabe as $bild) {
   echo "Beschreibung: $bild[1]<br>";
   echo "embed: $bild[2], auto: $bild[3]<br>";
   echo "Dateiname: $bild[4]<br>";
}
PREG_PATTERN_ORDER wäre sinnvoll, wenn du z.B. nur die Dateinamen als Array brauchst - dann kannst du in deinem Beispiel direkt mit $ausgabe[4] weiterarbeiten ohne irgendwelche Schleifen zu erstellen.
KB:knigge
Benutzeravatar
SoulReaver1989
Mitglied
Beiträge: 204
Registriert: 25.04.2004 13:24
Wohnort: Freiberg am Neckar
Kontaktdaten:

Beitrag von SoulReaver1989 »

Danke das hat funktioniert!
Aber ersetzen muss ich dann wieder mit preg_replace oder?
Langeweile?
Schick Feuer an die 112 und sofort stehen 20 lustige Leute mit roten Partyhüten vor deiner Tür!
Antworten

Zurück zu „Coding & Technik“