<IMG Regular Expression

  • Hallo,
    ich möchte mit einer Regular Expression alle Bilder einer Seite auslesen um anschließend zu prüfen wie viel Prozent dieser einen ALT-Tag haben.


    Folgender Regular Expression Code gibt jedoch gar nichts aus, was ich nicht ferstehe:

    HTML
    1. <img[.\s]*>


    Woran könnte dies liegen?



    Beispiel:

    HTML
    1. <img src="img/screenshots/beispiel1.png" width="250" alt="blabla" />


    Regular Expression online Tester:
    http://www.regex-tester.de/uc_876_de.html


    Einstellungen:


    • Gier unterdrücken
    • Groß-/Kleinschreibung ignorieren


    Danke

  • Hallo,

    Zitat


    . ist ein delimiter den kannst du nicht in [] einsetzten.

    das verstehe ich irgendwie nicht. Man muss den Punkt doch irgendwie nutzen können um alle Zeichen außer den Ausnahmefällen zu referenzieren? Außerdem gibt es ja keine Probleme wenn man nicht als Pattern Delimiter den Punkt nutzt.


    Ist es auch möglich zudem noch den Text im eventuell vorhandenen alt Attribut auszulesen?


    Code
    1. <img src="img/screenshots/beispiel1.png" width="250" alt="blabla blabla" />
    2. <img src="img/screenshots/beispiel1.png" width="250" />
    3. <img src="img/screenshots/beispiel1.png" width="250" alt="" >
    4. <img src="img/screenshots/beispiel1.png" width="250" alt='123' >

    So geht es leider nicht, denn dann wird nur <img [^>]+\/?> ausgeführt:

    Code
    1. <img (alt="[\w]*")[^>]+\/?>|<img (alt='[\w]*')[^>]+\/?>|<img [^>]+\/?>


    EDIT:


    Ich glaub ich hab es nun doch noch geschafft:


    PHP
    1. $pattern = '/<img(?:.+(?:alt="(.*)"|alt='(.*)'))*(?:.)*>/i';



    Und
    nochmal eine verbesserte Version:


    PHP
    1. $pattern = '/<img(?:.+(?:alt=["|']+(.*)["|']+))*(?:.)*>/i';