Adam: Bilder über regex filtern

Hi,

ich möchte alle Bilder aus einem HTML-Text herausfiltern.
Ich benutze dafür die folgende Regex:

preg_match_all("@<img.*src\s*=\s*'"['"][^>]*@i",$Text,$Match)

Die Regex funktioniert richtig ich möchte aber, dass in $Match[0]
der ganze Pfad steht.

z.B. <img src="htttp.www.karl.org/bild.jpg">

Dann bekomme ich <img src="htttp.www.karl.org/bild.jpg".

Wie kann ich das beheben? Ist in der Regex etwas falsch?

Danke
Adam

  1. Huhu Adam

    Wie kann ich das beheben? Ist in der Regex etwas falsch?

    Nein, schau Dir in der Doku nochmal an wie die Matches im Array abgelegt werden.
    Index 0 ist immer der gesamte Match des Regexp.
    Dann folgen die geklammerten Teilausdrücke.
    In Deinem Fall also $Match[1].

    Am besten Du lässt Dir das Array $Match mal per var_dump() ausgeben.
    Dann sollte es verständlich werden.

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Hi,

      Wie kann ich das beheben? Ist in der Regex etwas falsch?

      Nein, schau Dir in der Doku nochmal an wie die Matches im Array abgelegt werden.
      Index 0 ist immer der gesamte Match des Regexp.
      Dann folgen die geklammerten Teilausdrücke.
      In Deinem Fall also $Match[1].

      Am besten Du lässt Dir das Array $Match mal per var_dump() ausgeben.
      Dann sollte es verständlich werden.

      Ja aber wenn ich die Klammern weglasse bekome ich immer noch das '>' weniger.

      Adam

      1. Huhu Adam

        Ja aber wenn ich die Klammern weglasse bekome ich immer noch das '>' weniger.

        Wieso Klammern weglassen?

        Dein RegExp matched ja auch ausdrücklich keine '>' am Ende.

        preg_match_all("@<img.*src\s*=\s*'"['"][^>]*@i",$Text,$Match);

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
  2. ich möchte alle Bilder aus einem HTML-Text herausfiltern.

    preg_match_all("@<img.*src\s*=\s*'"['"][^>]*@i",$Text,$Match)

    Die Regex funktioniert richtig ...

    Nein. Der funktioniert auch nicht bei mehreren img-Tags.

    ich möchte aber, dass in $Match[0] der ganze Pfad steht.

    z.B. <img src="htttp.www.karl.org/bild.jpg">

    Dann bekomme ich <img src="htttp.www.karl.org/bild.jpg".

    Wie kann ich das beheben? Ist in der Regex etwas falsch?

    Ja. So ist er richtig: "@<img.*?src\s*=\s*'"['"].*?>@i"

    Beachte die Fragezeichen und diese Information zu gierigen und genügsamen Suchmustern.