Andreas: ereg Problem in PHP

Hi,
ich habe folgendes Problem. Ich habe eine Bildadresse http://www.domain.de/pics/0.jpg

Wenn ich jetzt auf einen Link klicke soll das nächste Bild geladen werden. Also http://www.domain.de/pics/1.jpg

Bis jetzt habe ich folgenden Code. Aber der funktioniert nicht. Kann mir jemand sagen woran es liegt?

ereg("^(.+)([0-9]+)$-(.jpg)$", $bildurl, $array1);
$array1[2] = $array1[2]+1;
$bildurl = $array1[1].$array1[2].$array1[3];

Noch mal in Kurz. Ich will das .jpg abspalten, die Nummer um eins hochzählen und alles wieder zusammenfügen.

Danke im Voraus.

Gruss Andreas

  1. Hallo Andreas,

    Bis jetzt habe ich folgenden Code. Aber der funktioniert nicht. Kann mir jemand sagen woran es liegt?

    ereg("^(.+)([0-9]+)$-(.jpg)$", $bildurl, $array1);

    Erstens: ereg solltest Du nicht verwenden, da das 1. langsam ist, 2. nicht binärsicher und 3. nicht gerade viel kann. Verwende lieber die preg-Funktionen.

    Zweitens: Bauen wir uns mal einen regulären Ausdruck zusammen:

    http://www.domain.de/pics/0.jpg
                              ^
                              Du willst diese Zahl hier extrahieren

    Dann formulieren wir den Teil einfach mal:

    ([0-9]+)

    Jetzt schauen wir uns das an, was drum herum ist:

    .jpg -> in einem regulären Ausdruck wird das zu: (.jpg)
    http://..../ -> nachdem das der komplette Rest der Zeichenkette ist, kannst Du auch getrost (.*) nehmen. Allerdings musst Du der .*-Konstruktion sagen, dass sie nicht zu viel fressen soll, daher ein (.*?)

    -> der reguläre Ausdruck ist:

    (.*?)([0-9]+)(.jpg)

    Das ganze packen wir jetzt noch in eine schöne preg-Funktion:

    $res = preg_match ('/(.*?)([0-9]+)(.jpg)/', $bildurl, $array1);

    Und schon hast Du Dein Problem gelöst.

    Viele Grüße,
    Christian

    PS: Ein paar Links zum Thema:

    http://www.dclp-faq.de/q/q-regexp-ereg.html
    http://de3.php.net/preg_match
    http://de3.php.net/manual/de/pcre.pattern.modifiers.php
    http://de3.php.net/manual/de/pcre.pattern.syntax.php
    http://www.dclp-faq.de/q/q-regexp-gierig.html

    1. Hallo nochmal,

      *argh* - ich Idiot habe natürlich die ^ und $-Zeichen vergessen - er soll ja schließlich die ganze Zeichenkette matchen und nicht nur einen Teil davon. Sorry.

      (.*?)([0-9]+)(.jpg)

      ^(.*?)([0-9]+)(.jpg)$

      $res = preg_match ('/(.*?)([0-9]+)(.jpg)/', $bildurl, $array1);

      $res = preg_match ('/^(.*?)([0-9]+)(.jpg)$/', $bildurl, $array1);

      Viele Grüße,
      Christian

    2. Danke für die schnelle Antwort. Klappt prima. Wusst nur nimmer, dass man des .jpg mit (.jpg) abtrennt. Danke

      Gruss Andreas