Regular expression IMG SRC attribuut

Pagina: 1
Acties:

  • wibber
  • Registratie: Februari 2001
  • Laatst online: 28-09 16:36
Hi,

Ik wil graag van alle img tags van een html document het src attribuut uitlezen. Dus als ik bijv. <img src="mysite.com/images/pietje.gif" /> heb, wil ik mysite.com/images/pietje.gif als resultaat hebben. Ik heb nog niet zoveel ervaring met regular expressions maar ben tot het volgende gekomen:

(<img\s.*src\s*=\s*)("|')(.*)(\2[^<]*>)

Deze regular expression geeft de goede urls terug, maar als er twee img tags op een regel staan, neemt ie ook de tussenliggende karakters mee. Dus:

<img src="plaatje1.gif" /> hier nog wat tekst <img src="plaatje2.gif" /> wordt gezien als 1 match en volgens mij heeft dat te maken met mijn het gebruikt van \s.*. Helaas is mijn ervaring met regular expressions gering en hoop ik dat iemand mij hiermee kan helpen.

Alvast bedankt!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Wat wil je met die informatie gaan doen? Want je zou het eventueel met een javascript direct uitlezen en ergens naartoe pushen / posten?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 27-09 08:46

smokalot

titel onder

als ik aan het shellscripten ben normaliseer ik de input altijd eerst, bijvoorbeeld door bij "<img" altijd een nieuwe regel te beginnen.

Je kunt hier ook zorgen dat ie verplicht ook matcht op het afsluiten van de tag, is dat niet een idee?

Ik weet niet wat voor applicatie je het over hebt, maar kun je niet ook een xml parser gebruiken?

It sounds like it could be either bad hardware or software


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

Mijn eerste idee is ook: parsen naar een DOM-tree.
Als je toch string-functies wilt gebruiken doe het dan in een aantal stappen en probeer het niet met 1 draak van een regexp te doen:

1) eerst alle img-tags matchen: /<img\s[^>]>/i
2) binnen je img-tag alle attributen uitsplitsen (splitten op whitespace)
3) binnen je attributen de attribuut-naam en -value uitsplitsen
4) kijken of het src-attribuut bestaat en dan de value teruggeven

Een dergelijke pragmatische werkwijze is veel minder foutgevoelig en ook herbruikbaar voor andere zaken :)

Intentionally left blank


  • wibber
  • Registratie: Februari 2001
  • Laatst online: 28-09 16:36
Bedankt voor de feedback. De bedoeling van mijn applicatie is om plaatjes die van externe resources komen, via een proxyserver opgehaald worden zodat de browser (IE in this case) niet begint te zeuren over mogelijk onveilige items. Ik denk dat ik misschei ngewoon eerst de img tags ga matchen en daarna zelf wel splitten. Nogmaals bedankt.

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 30-11 19:23
crisp schreef op donderdag 01 februari 2007 @ 12:49:
...
2) binnen je img-tag alle attributen uitsplitsen (splitten op whitespace)
...
Leveren alt attributen hierbij geen probleem op?

Bezoek eens een willekeurige pagina


  • wibber
  • Registratie: Februari 2001
  • Laatst online: 28-09 16:36
Kan toch controleren of het attribuut "src" of iets anders is?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

EdwinG schreef op donderdag 01 februari 2007 @ 15:01:
[...]

Leveren alt attributen hierbij geen probleem op?
Dat was idd wat simplistisch voorgesteld; uiteraard dien je rekening te houden met quoted values e.d.
tokenizen is meestal nog wel de beste manier...

Intentionally left blank


Verwijderd

even een antwoord op de originele vraag: je probleem wordt veroorzaakt door het feit dat de * zogenaamd "greedy" gedrag vertoont. Dat wil zeggen dat .* zoveel mogelijk karakters matcht.

Ik weet niet wat voor regexp je precies gebruikt, maar in bijv. perl kun je schrijven .*? voor een non-greedy match (dus met vraagteken achter *).
Pagina: 1