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:

[ignore]http://www.meukee.net/bla.jpg[/ignore]

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.
Omschrijf duidelijk wat je bedoelt met "string" dat kan namelijk van alles en nog wat zijn.

En waarom een reguliere expresie als je dit ook eventueel met DOM/XSLT kan afhandelen?
- Aar - op 16/11/2011 20:44:14

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.."  />
';


wordt:

[ignore]http://www.meukee.net/bla.jpg<p>Dit is niet van toepassing voor de regex en moet genegeerd worden.</p>http://www.meukee.net/bla.jpg<br />http://www.meukee.net/bla.jpg[/ignore]

Gewoon, de waardes uit de src-attributen dus.
ik ben ook niet zo'n kenner van reguliere expressies, maar moet
#<\s*img [^\>]*src\s*=\s*(["\'])(.*?)\1#im

niet iets als
[#<\s*img [^\>]*src\s*=\s*(["\'])(.*?)(["\'])\1#im

zijn?

ik zie nl alleen de openingsquotes van src, en niet de afsluitquotes
Deze werkt wel per string met in eider geval 1 img-tag.

maar het moet dus meerdere herkennen. Op het herkennen van de img-tag is de reg-ex al goed. Dus... wie-o-wie?
ik heb zoiets volgens mij ooit ns gedaan, ns voor je zoeken
Doe dat... laat maar weten :-)
Je kan van die string xml maken en met DOM/XSLT het sakie gewoon transleren naar de layout zoals je die zou willen hebben.
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:
<a href="iets.php">Iets</a>
<a href="iets.php" class="anchor">Iets</a>
<a href='iets.php'>Iets</a>
<a title="hallo" href="iets.php">Iets</a>


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)
geef maar even wat uitleg over die expressie. Snap het maar deels ;).

Die 'g'-modifier is geen onderdeel vsn PHP's PCRE, dus wat doet deze dan wel buiten PCRE om?
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


De array die er uit komt ziet er zo uit:
<?
array
  0 => 
    array
      0 => string '<img src="plaatje.png">"' (length=27)
      1 => string '<img src="iets.jpg" class="header-img" />' (length=42)
      2 => string '<img src='hallo.gif' />' (length=27)
      3 => string '<img title="hello" src="kip.png"' (length=41)
  1 => 
    array
      0 => string 'plaatje.png' (length=8)
      1 => string 'iets.jpg' (length=8)
      2 => string 'hallo.gif' (length=8)
      3 => string 'kip.png' (length=8)

Reageren