Ik probeer een regelar expression te maken maar het wil niet gaan zo als ik het ingedachten had.
Ik probeer het volgende te zoeken in een string.
<a href='...'> <img scr='...'> </a>
De info ophalen die op de plaats van de puntjes staat probeer ik op te halen. En het zou dan moeten werken op alle variante die kunnen. dus als er een class bij staat moet dat niets uit maken (<a class="link" href='...'>).
Punten die mij opvallen in je regex:
- [\'|\"] Dit betekent NIET ' of ", maar ' of | of " ! Maak hier dus gewoon [\'\"] van. Daarbij hoeft de dubbele quote niet gestript te worden, dus gewoon [\'"]
Ook matcht jouw code dit: <a href='url"><img src='url></a>
Dit wil je natuurlijk niet, dus kun je beter kijken naar een manier om te kijken naar het eerste teken en kijken wanneer deze stopt:
href=([\'"])(.*?)\1
Nu werkt enkel de url ZONDER enige quotes niet...
Hier moeten we nog voor compenseren: (href=([\'"])(.*?)\1|href=([^ ]+))
Daarbij vergeet je dat het ook toegestaan is om spaties e.d. tussen de href en het =-teken te zetten, ook kan dit tussen het =-teken en de waarden...
Na href staat geen van 3 mogelijkheden het is namelijk htm. Dus hij zou deze moeten over slaan. Maar hij gaat gewoon opzoek naar een stuk dat wel matched en dus extract hij 03.htm"><img src="tm_03.jpg
Wat je hiertegen kunt doen ik kijken wat er absoluut niet in een url mag voorkomen. Ik denk nu als eerste aan quotes...
Je kunt namelijk vertellen wat er NIET in mag voorkomen: [^"]
Dan zou ik dit ervan maken: href=([\'"])([^\'"]+\.(?:jpg|gif|png))\1
Wat gebeurt hier?
eerst zoeken we op href=
Als we dit gevonden hebben pakken we de quote die erna staat ([\'"]) en slaan deze op als zijnde \1. Dan pakken we de tekst erna en zeggen dat daar geen quote in mag staan. Ik heb geprobeerd om de \1 te gebruiken, maar ik krijg [^\1] niet goed werkend, dus heb ik besloten dat er gewoon GEEN quote in mag... want dat zou je in principe alleen bij Javascript gebruiken, als ik het goed heb.
Daarna zoeken we op de extensie. Deze extensie hoeft niet als aparte variabele opgeslagen te worden: vandaar de ?: aan het begin van de group. En na de inhoud van het href-attribuut volgt de quote.
Als je het helemaal mooi/perfect wilt hebben, moet je denk ik de single en double quote apart matchen en ook nog controleren op eventueel gestripte quotes:
Ik heb al gezegd dat er ook spaties/enters tussen de href en het =-teken kan zitten..
Daarbij wil ik ook melden dat een extensie niet alles zegt. Sommige afbeeldingen zijn .php; als ze gerendered worden via GD o.i.d. ... Daarbij kun je natuurlijk ook controleren of de inhoud van het href-attribuut gelijk is aan die van de src.