Supportvragen Mac > Programmeren in bijvoorbeeld C(++), Cocoa, Java, BASIC, en Swift

Perl probleempje

(1/1)

Leon:
Ik zit met een probleempje in Perl waar ik even niet uitkom. Voorbeeld, ik heb een string en die ziet er alsvolgt uit:
--- Code: ---
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>.

--- Einde van code ---
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.

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:

Leon:
Ben er uit (met hulp)... Dit is de oplossing:
--- Code: ---
$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 tagsforeach (@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

--- Einde van code ---

Navigatie

[0] Berichtenindex

Naar de volledige versie