[REGEXP] Meerdere matches in één string

Pagina: 1
Acties:

  • HaBl
  • Registratie: November 2003
  • Laatst online: 07-10-2025
Hallo,

Ik probeer in een HTML bestand naar links te zoeken dmv een regular expression. Dit is opzich niet zo heel spannend, maar wat ik mij afvraag of het ook mogelijk is meerdere matches in 1 regel te kunnen terughalen. Dit omdat op een regel HTML wel vaker meer links staan. Hieronder een voorbeeld zoals ik het wil hebben in Perl. Welke taal het is is opzich niet zo belangrijk, het gaat hem om die regexp (tenzij het niet mogelijk is met een regexp natuurlijk).

code:
1
2
3
4
$string = "<td><a href=\"pagina01.htm\">1</a></td><td><a href=\"pagina02.htm\">2</a></td>";
if ($string =~ /<a href=\"pagina([0-9]{2})\.htm\">/) {
    print "pagina" . $1 . ".htm";
}


Edit: Voor het idee de punt ook maar even ge-escaped :)

[ Voor 4% gewijzigd door HaBl op 12-10-2006 12:46 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Ik ken Perl niet, maar het lijkt me niet dat je met een enkel if-statement meer dan 1 match kunt printen. Je regexp is an sich goed (afgezien van het feit dat je die punt nog moet escapen) maar de implementatie verschilt per taal. Je zal een functie moeten hebben die een array met matches uitpoept..

日本!🎌


  • HaBl
  • Registratie: November 2003
  • Laatst online: 07-10-2025
Hmm.. ok.. Dan wordt het lastig denk ik.. Volgens mij heeft Perl geen optie om het als array terug te geven. Volgens mij heeft perl helemaal geen functies voor regexp (zoals php bijvoorbeeld). Dus dan vraag ik me af of het niet met een loop ofzo mogelijk is alle resultaten eruit te halen. Iemand? :)

En idd, ik ben die punt vergeten, in het officiele script staat hij er wel, ik had dit stukje even uit de losse pols neergezet omdat ik anders een beetje veel code neer moet zetten wat niets met mijn vraag te maken heeft :p

  • HaBl
  • Registratie: November 2003
  • Laatst online: 07-10-2025
En na even wat zoekwerk heb ik dan een oplossing gevonden. De oplossing moest toch meer in Perl gezocht worden dan in de regex. Hier de code:

code:
1
2
3
4
5
$_ = "<td><a href=\"pagina01.htm\">1</a></td><td><a href=\"pagina02.htm\">2</a></td>";

while (/<a href=\"pagina([0-9]{2})\.htm\">/g) {
   print "pagina" . $1 . ".htm";
}


Bron: http://perldoc.perl.org/perlfaq6.html en http://builder.com.com/5100-6371-1044670.html
Bedankt!

[ Voor 14% gewijzigd door HaBl op 12-10-2006 14:36 ]