[REGEX] img src="" filtern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] img src="" filtern

    Hallo!

    Ich bin gerade auf dem Pfar der Regular Expressions und komme nicht weiter. Ich will meine ganze Seite auf <img src="" /> Tags überprüfen um nicht verwendete Bilder zu finden. (Erst die verwendeten und dann werden alle aus dem images Ordner rausgeschmissen, die nicht verwendet werden).

    Dazu dachte ich mir, nehme ich RegExp und habe herumprobiert und bin soweit, dass ich folgende RegExp habe:

    '@<img src="(.*)"(.*?)>@is'

    http://www.regex-tester.de/uc_305_de.html

    Leider schiesst das Dingen übers Ziel hinaus, weil er am ende des <img src="" /> nicht aufhört. Warum, weiß ich nicht, und da ich mir schon viele Tutorials dazu durchgelesen habe und mehrere RegExp Tester benutzt habe aber mein Ergebnis nicht das ist, was ich brauche, wollte ich die breite Masse fragen, was ich falsch gemacht habe...

    /EDIT:

    ... '/<img[^>]+>/is' ... entschuldigung, gerade eben gefunden ...
    Zuletzt geändert von stekoe2000; 27.03.2008, 12:36.
    Liebe Grüße,
    SteKoe!

    PHP Tutorials
    Peter Kropff | Quakenet | Schattenbaum.net

  • #2
    Wo kein / ist, kann auch kein / gematched werden.

    Kommentar


    • #3
      Schonmal mit Schalter U für Ungreedy probiert?
      Code:
      '@<img src="(.*)"(.*)>@isU'
      Weil dein .* ohne ungreedy matched einfach alles bis zum Ende des Strings. Ohne ungreedy probiert der RegExp gar nicht aus ob " vorkommt, sondern matched es aufgrund von .*

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Wo kein / ist, kann auch kein / gematched werden.
        Wo siehst du / als Zeichen? Der / in einem RegExp ist ein Begrenzer, hat also eine spezielle Funktion. Wenn du / als Zeichen finden willst musst du ihn innerhalb des Musters escapen \/
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Danke für die Antworten, wie oben geschrieben erfüllt diese RegExp: '/<img[^>]+>/is' was ich will.

          Den Schalter U hatte ich versucht, hatte leider auch nichts gebracht.
          Liebe Grüße,
          SteKoe!

          PHP Tutorials
          Peter Kropff | Quakenet | Schattenbaum.net

          Kommentar


          • #6
            Wenn es nicht gefunzt hat, dann hast du was falsch gemacht. Ich vermute mal dass dann dein RegExp so ausgeschaut hat
            Code:
            '@<img src="(.*)"(.*?)>@isU'
            Und wenn dem so ist dann brauchst du dich nicht wundern. Denn mit dem ? zusammen mit U wird der Ausdruck wieder greedy
            Der Ausdruck funzt schon wie du hier sehen kannst

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Original geschrieben von jahlives
              Wo siehst du / als Zeichen? Der / in einem RegExp ist ein Begrenzer, hat also eine spezielle Funktion. Wenn du / als Zeichen finden willst musst du ihn innerhalb des Musters escapen \/
              Als Delimiter kann quasi jedes nicht-alphanumerische Zeichen außer dem Backslash verwendet werden
              Ausserdem hab ich mich auf das /> des img-Tags bezogen

              Kommentar


              • #8
                Original geschrieben von $_Baker
                Als Delimiter kann quasi jedes nicht-alphanumerische Zeichen außer dem Backslash verwendet werden
                Und wo siehst du einen Backslash?
                Original geschrieben von $_Baker
                Ausserdem hab ich mich auf das /> des img-Tags bezogen
                Das ist eine faule Ausrede, da dieser Slash gar nirgends abgefragt wird.
                Gruss
                H2O

                Kommentar


                • #9
                  Ausserdem hab ich mich auf das /> des img-Tags bezogen
                  Und erklärst du mir den Grund warum / nicht von .* gematched werden würde.
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    OffTopic:
                    Ich seh schon, es is nich gut, in einem geistig unwachen Zustand etwas sinnvolles Posten zu wollen


                    Bevor sich einige angegriffen Fühlen, lass ich das mal lieber

                    Kommentar


                    • #11
                      Das Problem ist eigentlich ganz Simpel... und du warst auch schon nahe an der Lösung...

                      '@<img src="(.*[COLOR=red]?[/COLOR] )"(.*?)>@is'
                      http://www.regex-tester.de/uc_312_de.html

                      Kommentar


                      • #12
                        @jmc
                        Oder einfach U hintendran. Das würde dir dann in diesem Fall 1 Zeichen einsparen
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          Ich hätte gern noch ein Regex für den Fall, das der src-Parameter nicht unmittelbar nach dem Beginn des img-Tags folgt.

                          Ich habe ein ähnliches Problem wie der Ur-Autor stekoe2000, wo ich in einem Verzeichnis im HTML-Code der Dateien die referenzierten Grafiken finden muß. Beschränke ich die Suche auf den src-Parameter, habe ich nicht nur Grafiken in der Ergebnisliste.

                          Das bisherige Regex
                          PHP-Code:
                          @<img src="(.*?)".*?>@is 
                          findet also z.B. nicht
                          PHP-Code:
                          <img width="252" height="49" border="0" align="middle" 
                          src="/news/data/images/4von6.jpg" alt="4von6.jpg" title="4von6.jpg" /> 
                          Ergänzung. Ich hab's woanders gefunden:
                          PHP-Code:
                          @<img.*?src="(.*?)".*?>@is 
                          Zuletzt geändert von Samson; 20.06.2009, 19:52. Grund: Erledigt

                          Kommentar


                          • #14
                            Zitat von jahlives Beitrag anzeigen
                            @jmc
                            Oder einfach U hintendran. Das würde dir dann in diesem Fall 1 Zeichen einsparen
                            Ich mag das U nicht. Meine Regex teste ich auch gerne im UltraEdit (Regex-Engine: PERL in den erweiterten Einstellungen; die UE-eigene Engine ist viel zu unflexibel und umständlich), da geht das ganz ohne Webseiten...
                            File->New, Quellcode reinpfeffern und Regex drüberlaufen lassen.
                            Wenn ich dann solche exotischen Sachen wie 'U' verwende, müsste ich die Regex für anderweitige Verwendung immer wieder umschreiben.
                            Mit der '?'-Verwendung "spare" ich zwar nicht an jedem Zeichen ein, bin aber mehrfach kompatibel; könnte das dann sogar in Windows@Cygwin über Perl testen lassen. Ohne nochmal dran rumfummeln zu müssen.

                            Fazit: Diese Agonie um das Einsparen von einzelnen Zeichen ist oft nicht wirklich sinnvoll...
                            Zuletzt geändert von syntaxerror; 26.03.2010, 13:36.

                            Kommentar


                            • #15
                              Aha, schön zu wissen... Aber der Thread ist fast ein Jahr alt.

                              Kommentar

                              Lädt...
                              X