Perl probleempje
4 december 2003 - 02:40   
geplaatst door: Leon
Ik zit met een probleempje in Perl waar ik even niet uitkom.

Voorbeeld, ik heb een string en die ziet er alsvolgt uit:


Dit is een tekst waarin een <a href="http://www.bla.nl/iets.html">link</a> in zit, maar ook een <a href="http://www.bla.nl/iets.html">link met meerdere woorden</a>.

Nu moet ik die string afzoeken naar het woordje link en daar iets mee doen. Dat op zich is geen probleem. Het probleem zit 'm in dat er juist NIETS moet gebeuren wanneer het woordje "link" verpakt is in HTML tag's zoals een anchor-ref.

Perl probleempje
4 december 2003 - 07:36    reactie #1
geplaatst door: Reflex
als je dan in een tijdelijke variabele de waarde van die string min de html code doet, en dan er dan naar zoekt?
wat je ook kunt doen, is zoeken op 'link' en vervolgens met strspn oid zoeken op de eerst voorkomende '>' (welke dus einde van de html, en begin van de link-text aangeeft) kijken of '>' eerder voorkomt dan 'link' en t zou moeten werken :)

:thumbs-up:

God has a hard on for Marines, because we kill everything we see. He plays His games, we play ours. To show our appreciation for so much power, we keep heaven packed with fresh souls. God was here before the Marine Corps, so you can give your heart to Jesus, but your ass belongs to the corps.
Perl probleempje
4 december 2003 - 20:08    reactie #2
geplaatst door: Leon
Ben er uit (met hulp)... Dit is de oplossing:


$text = qq~
Dit is een tekst waarin een <a href="http://www.bla.nl/iets.html">link</a> in zit, maar ook een <a href="http://www.link.nl/iets.html">link met meerdere woorden</a>. Dit is alleen het woordje "link".
~;

@words = split(/<(a.+?[^>]a)>/,$text);  #this should hopefully only split at anchor tags

foreach (@words)
{
  next if (/<\/a$/);  #skip anchor tags
  $_ =~ s/link/stink/ig  #replace link with stink
}

foreach(@words) #rebuild the anchor tags
{
  $_ = '<' . $_ if (/<\/a$/);
  $_ .= '>' if (/<\/a$/);
}

$text = join (" ",@words);

print $text