Toon posts:

Perl / Regexp

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik probeer tags die direct rond een <a > tag staan weg te halen.

Dus..
<b><a href="blabal.html"></b>
moet worden
<a href="blabla.html">

Dit lukt met de volgende regexp:
code:
1
2
3
4
foreach( $text =~ s/<b><a(.*?)><\/b>/<a $1>/ig )
{
1;
}


Dit gaat goed, maar als ik nu een tag met inhoud krijg bv <font face="arial> dan gaat het verkeerd.

Het zou zo moeten lukken:
code:
1
2
3
4
foreach( $text =~ s/<font(.*?)><a(.*?)><\/font>/<a $2>/ig )
{
1;
}


Maar dat gaat dus niet goed, hij matched nu tot aan de opening-tag van de link '<a',
Dit betekend dat dit:
<font face="arial">text text<a href="balbal.html">link</a></font>
ook matched, maar ik wil alleen matchen als de font tag direct wordt gevolgd door de image tag.

Dus dit
<font face="arial"><a href="balbal.html">link</a></font>

Wat doe ik verkeerd?

[ Voor 18% gewijzigd door Verwijderd op 25-03-2003 13:50 ]


Verwijderd

Het zou zo moeten lukken:

code:
--------------------------------------------------------------------------------
foreach( $text =~ s/<font(.*?)><a(.*?)><\/font>/<a $2>/ig )
{
1;
}

--------------------------------------------------------------------------------


Maar dat gaat dus niet goed, hij matched nu tot aan de opening-tag van de link '<a',
Dit betekend dat dit:
<font face="arial">text text<a href="balbal.html">link</a></font>
ook matched, maar ik wil alleen matchen als de font tag direct wordt gevolgd door de image tag.

Dus dit
<font face="arial"><a href="balbal.html">link</a></font>
Hmm, bij mij werkt jouw gedachtegang prima.

Perl:
1
2
3
4
$text = "<font face='arial'>text text<a href='balbal.html'>link</a></font>";
$text =~ s/<font(.*?)><a(.*?)><\/font>/<a$2>/gi;

print $text;


Dit levert bij mij namelijk idd geen match op, alleen als <font> aan de <a> geplakt zit, dan werkt ie...

En dan nog iets, waarom foreach, je gebruikt toch global (g)...

[ Voor 32% gewijzigd door Verwijderd op 25-03-2003 14:29 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Ik weet niet of de * en + metacharacters in Perl default greedy zijn of niet, maar daar lijkt 't hier wel vanaf te hangen...

Haal de 2 vraagtekens na de de *-en even weg, en probeer 't eens... Of gebruik ipv een .* een [^>]*

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
drm schreef op 25 maart 2003 @ 14:16:
Ik weet niet of de * en + metacharacters in Perl default greedy zijn of niet, maar daar lijkt 't hier wel vanaf te hangen...

Haal de 2 vraagtekens na de de *-en even weg, en probeer 't eens... Of gebruik ipv een .* een [^>]*
Die + en * zijn greedy, tenzij er een ? achter staat. Het lijkt me dat die vraagtekens dus wel op hun plaats zijn.