Door
- Ariën -
op 16-11-2011 20:44
gewijzigd op 16-11-2011 21:04
1.159 views
Ik zit met het volgende vraagstuk. Ik ben niet echt zo'n reguliere expressie kenner, maar met behulp van internet ben ik op de volgende reguliere expressie uitgekomen:
#<\s*img [^\>]*src\s*=\s*(["\'])(.*?)\1#im
.
Nu heb ik een string waarin soms een hoop img's in voorkomen, en nu wil ik dus in die string alle <img src="...." /> omzetten naar normale url's.
Dus <img src="http://www.meukee.net/bla.jpg" title="Ja, bla" alt="Bla.." height="42" width="42" /> (en wat varianten erop, zoals single quotes, zonder sluit-slash etc..) zou dan gereplaced moeten worden in:
Zou dit in een reguliere expressie moeten met preg_match, of is dat nog niet voldoende? het gaat er om dat alle 'img' in de string gereplaced moeten worden.
Nu heb ik een string waarin soms een hoop img's in voorkomen, en nu wil ik dus in die string alle <img src="...." /> omzetten naar normale url's.
$string = '
<img src="http://www.meukee.net/bla.jpg" title="Ja, bla" alt="Bla.." height="42" width="42" /><p>Dit is niet van toepassing voor de regex en moet genegeerd worden.</p>
<img src="http://www.meukee.net/bla.jpg" /><br />
<img src="http://www.meukee.net/bla.jpg" title="Ja, bla" alt="Bla.." />
';
Ik heb hier een tijdje geleden een REGEX geschreven van anchor naar URL. Even ombouwen en je hebt wat jij wilt: http://gskinner.com/RegExr/?2v3q1
En voor het geval de link niet werkt:
/<a\s.*?href=(?:'|")(.*?)(?:'|").*?>.*?</a>/gi
Deze bevat alles wat je maar kunt verzinnen:
En omgebouwd zou het zoiets worden:
/<img\s.*?src=(?:'|")(.*?)(?:'|").*?>/gi
(mocht je de uitleg willen hebben, zeg het even, dan maak ik hem zo voor je)
De g-modifier heb ik me inderdaad in vergist, deze is volgens mij van JS. In PHP moet je hiervoor [php]preg_match_all[/php] gebruiken.
De regex:
/ Het beginnen van een regex (kan je met elk teken doen)
<img Match een <img, het begin van elke img tag
\s Na <img komt sowieso een spatie, dus match die
.*? Na die spatie kan er van alles staan, dus haal dat weg
src= Totdat we bij de src attribute zijn aangekomen.
(?:'|") Match een enkele of dubbele quote
De ?: staat ervoor dat hij deze group niet onthoud
(.*?) Match het geen wat tussen quotes staat
(?:'|") Weer hetzelfde als 1 stap hiervoor
.*? Dan kan er weer van alles staan, dus haal dat weg
> Het sluiten van de img tag
/i Het sluiten van de regex, met een Case Insentive type