Suchen
Inside Forum
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > PHP > PHP

PHP Alles rund um PHP

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 24.11.2006, 09:00
Donar Donar ist offline
Besucher
 
Registriert seit: 30.09.2004
Beiträge: 54
Standard

hmm, kA ob das Forum passt aber ich finde, dass es gar net so einfach ist durch den regulären Ausdruck schon irgendwie fortgeschritten ...

mein Problem ist folgendes ... man soll irgendwo auf einer seite {filelist:*} schreiben können ... wobei das * für dateiformate steht ... also z.B. {filelist:exe,zip,rar} ...

jetzt soll das dokument danach durchsucht werden und eine Funktion mit den Dateiformaten ausgeführt werden ...
ich will mir jetzt also erstmal alles in ein Array schreiben und habe folgenden Ansatz:

PHP Quellcode:
preg_match_all("/{filelist:(.*)}/",$content,$array);
So, wenn ich diesen Platzhalter nur einmal pro Dokument setze ist auch alles kein Problem ... wenn das allerdings 2x der fall ist ... z.B.

{filelist:zip,rar}
{filelist:exe}

dann wird es nur einmal ausgewertet ... es wird nach er ersten geöffneten geschweiften klammer gesucht und nach der letzten geschlossenen ... ich bekomm also

"zip,rar}
{filelist:exe"

als Wert übergeben ...

wie kann ich es machen, dass es bei beiden funktioniert??

MfG
Donar
Mit Zitat antworten
  #2  
Alt 24.11.2006, 09:21
Bernd456 Bernd456 ist offline
Vorbildlicher Helfer
 
Registriert seit: 17.01.2006
Beiträge: 16.560
Bernd456 eine Nachricht über Skype™ schicken
Standard

str_replace um die geschweiften Klammern wegzumachen

und einmal explode mit : und einmal mit ,
__________________
Der Kopf ist rund, damit das Denken die Richtung wechseln kann.
Mit Zitat antworten
  #3  
Alt 24.11.2006, 09:28
Donar Donar ist offline
Besucher
 
Registriert seit: 30.09.2004
Beiträge: 54
Standard

Zitat:
Bernd456 postete
str_replace um die geschweiften Klammern wegzumachen

und einmal explode mit : und einmal mit ,
um das zu machen muss ich ja erstmal alle platzhalter rausfinden und irgendwo zwischenspeichern ... genau das will ich ja mir preg_match_all bezwecken aber es nimmt halt immer das erste {filelist und das letzte }

MfG
Donar
Mit Zitat antworten
  #4  
Alt 24.11.2006, 09:40
Oliver Albers Oliver Albers ist offline
Forum-Mitarbeiter
 
Registriert seit: 03.12.2002
Beiträge: 27.397
Oliver Albers eine Nachricht über ICQ schicken
Standard

Ungreedy matchen, dafür gibts den U Modifyer.
__________________
Olli
Mit Zitat antworten
  #5  
Alt 24.11.2006, 09:44
Bernd456 Bernd456 ist offline
Vorbildlicher Helfer
 
Registriert seit: 17.01.2006
Beiträge: 16.560
Bernd456 eine Nachricht über Skype™ schicken
Standard

Zitat:
um das zu machen muss ich ja erstmal alle platzhalter rausfinden und irgendwo zwischenspeichern
wieso das denn? Du hast einen String und ersetzt bestimmte Zeichen. Wo mußt Du da was zwischenspeichern ?

Doku schon gelesen ?

DOKU-VORLESE-SERVICE(TM)
mixed str_replace(mixed search, mixed replace, mixed subject[, int count])
Replace all occurrences of the search string with the replacement string


und

DOKU-VORLESE-SERVICE(TM)
array explode(string delimiter, string string[, int limit = PHP_INT_MAX])
Split a string by string



Man kann auch beides verwenden:
PHP Quellcode:
$text = "{filelist:zip,rar}
{filelist:exe}"
;

$result = preg_replace('/(\\{filelist:)([^}]+)(\\})/', '\\2', $text);

$array = explode (":", $result);
__________________
Der Kopf ist rund, damit das Denken die Richtung wechseln kann.
Mit Zitat antworten
  #6  
Alt 24.11.2006, 09:45
BenniG. BenniG. ist offline
Vorbildlicher Helfer
 
Registriert seit: 01.06.2006
Ort: Heidelberg
Beiträge: 3.938
Standard

Zitat:
dann wird es nur einmal ausgewertet ... es wird nach er ersten geöffneten geschweiften klammer gesucht und nach der letzten geschlossenen ... ich bekomm also

"zip,rar}
{filelist:exe"
Regexe sind standardmäßig gefräßig:
http://de.php.net/manual/de/referenc....modifiers.php

so gehts:
PHP Quellcode:
$content="{filelist:zip,rar}{filelist:exe}";
$array=array();
preg_match_all("/{filelist:(.*)}/U",$content,$array);
echo "<pre>";
echo print_r($array);
echo "/<pre>";
Edit:
Na toll, durch testen 5Minuten zu spät
Mit Zitat antworten
  #7  
Alt 24.11.2006, 09:47
Donar Donar ist offline
Besucher
 
Registriert seit: 30.09.2004
Beiträge: 54
Standard

Zitat:
Oliver Albers postete
Ungreedy matchen, dafür gibts den U Modifyer.
Oh mann ... das ist ja so einfach ... ich glaub ich hatte bald alle Modidyer durch ... nur U noch net

big thx ... klappt prima ...

damit wäre das Thema auch schon erledigt ...

MfG
Donar
Mit Zitat antworten


Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
regulärer ausdruck Chrissi21 PHP 1 16.11.2006 12:56
regulärer ausdruck ruudi PHP 6 14.10.2006 12:26
Regulärer Ausdruck - min,max Aline PHP 1 11.01.2006 12:18
Regulärer Ausdruck M3 PHP 1 12.08.2004 00:44
Regulärer Ausdruck daveunlimited PHP 5 10.07.2004 12:20


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:52 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC