[perl] search mist vraagteken

Pagina: 1
Acties:

  • Son Of Neelix
  • Registratie: April 2001
  • Laatst online: 20-12-2023

Son Of Neelix

[ not from this planet ]

Topicstarter
Ik wil een collectie maken met alle links in een pagina. Hiervoor gebruik ik:
code:
1
 @ahrefs = ($data =~ /<a.*?<\/a>/gsi );


Dit werkt in principe heel goed, behalve wanneer ik de volgende link gebruik:
code:
1
<a href="index.htm">Dit is een link in vragende vorm?</a>


Mijn test wijst uit dat toevoegen/verwijderen van het vraagteken bepaalt of deze link niet resp. wel wordt opgenomen.

Hoe moet ik mijn regex veranderen? (met vraagteken :) )

Expect me when you see me


Verwijderd

Een vraagteken is een meta-karakter, het betekent iets in regex (nml, greedy toggle (achter een multiplier) of een multiplier (achter een patroon/klasse) van 0 of 1).

Als je het vraagteken er bij wilt hebben even escapen: \?

  • Son Of Neelix
  • Registratie: April 2001
  • Laatst online: 20-12-2023

Son Of Neelix

[ not from this planet ]

Topicstarter
Het klopt wat je zegt, maar (helaas) geeft het geen antwoord op mijn vraag hoe te veranderen....

Ik heb het volgende geprobeerd, maar daar loopt het script op vast, dus dat werkt (ook) niet:
code:
1
 @ahrefs = ( $data =~ /<a.*?(\?*)<\/a>/gsi);


Het eerste vraagteken heb ik dus al bewust gebruikt als quantifier, en niet om te matchen op vraagteken.

Expect me when you see me


  • Son Of Neelix
  • Registratie: April 2001
  • Laatst online: 20-12-2023

Son Of Neelix

[ not from this planet ]

Topicstarter
Oke, ik heb gewoon niet alles geprobeerd, ben er nu uit voor wat betreft het vraagteken:
code:
1
 @ahrefs = ( $data =~ /<a(.*?)\?*<\/a>/gsi);


Graag zou ik nu een iets generiekere oplossing zoeken, zodat ook andere leestekens mee genomen worden:
code:
1
 @ahrefs = ( $data =~ /<a(.*?)[[:punct:]]*<\/a>/gsi);


Maar dit werkt alleen wanneer de link eindigt met een leesteken, niet wanneer het leesteken ergens middenin staat...

Expect me when you see me


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

De ? wordt al gematched door de ., dus waarom wil je apart moeilijk doen daarvoor?
In theorie zou je eerste regexp moeten werken en ik zie iig niet waarom ie dat niet zou doen.

  • Mr_Blobby
  • Registratie: Mei 2000
  • Laatst online: 14:14
ACM schreef op 10 november 2003 @ 11:47:
De ? wordt al gematched door de ., dus waarom wil je apart moeilijk doen daarvoor?
In theorie zou je eerste regexp moeten werken en ik zie iig niet waarom ie dat niet zou doen.
Inderdaad
code:
1
2
3
$data = "<a href=\"test.html\">test?</a>";
@ahrefs = ($data =~ /<a.*?<\/a>/gsi);
print $ahrefs[0];
Werkt gewoon.

en zij zagen niet hoe spot in mij worstelde met verdriet


  • Son Of Neelix
  • Registratie: April 2001
  • Laatst online: 20-12-2023

Son Of Neelix

[ not from this planet ]

Topicstarter
Dat had ik ook verwacht (ik gebruik niet voor niets een .), maar bij mij werkt het dus niet!

Iemand een idee waarom de eenvoudige oplossing niet werkt?

Expect me when you see me


  • Son Of Neelix
  • Registratie: April 2001
  • Laatst online: 20-12-2023

Son Of Neelix

[ not from this planet ]

Topicstarter
Oke, ben erachter, maar snap nog niet waarom. Op mijn systeem zit het verschil 'm in de haakjes. De volgende code doet wat ie moet doen.
code:
1
@ahrefs = ($data =~/<a(.*?)<\/a>/gsi);

Expect me when you see me

Pagina: 1