Toon posts:

[PHP] Zoeken naar "<a>" binnen string

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hoi, ik heb dringend een functie nodig naar <a href="...">...</a> zoekt binnen een string. Vervolgens heb ik de href nodig.

Ik heb dus ongeveer zo'n functie nodig:
PHP:
1
2
3
4
5
6
7
8
// zelf bedachte functie
array preg_get_matches ( string pattern, string replacement, string subject )

// voorbeeld

$subject = "<a href=\"http://www.google.com\">Dit</a> is een test.";
$matches = preg_get_matches("/(<a href=[\"'])(.*)(>.*<\/a>)/","\\2",$subject);
// dit zou moeten geven: http://www.google.com

Helaas kan ik zo'n functie niet vinden in de php handleiding. Andere preg_* functies begrijp ik niet goed.

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 02-11 21:29

Tux

preg_match_all() ? ;)

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Verwijderd

Als je verwacht dat je wel iets terugkrijgt wat in de buurt komt, maar niet precies weet wat, gebruik dan print_r. Dan zie je daarna precies wat er schort/wat je anders moet doen/waar in je datastructuur de gewenste uitvoer zit.

Dus:

PHP:
1
2
3
// ...vorige code...

print_r($matches);

Verwijderd

Topicstarter
preg_match_all heb ik al geprobeerd, maar dat geeft niet de gewenste output.

Verwijderd

Verwijderd schreef op 01 november 2004 @ 18:53:
preg_match_all heb ik al geprobeerd, maar dat geeft niet de gewenste output.
moet wel kunnen gewoon hoor.. momentje dan test ik ff wat..

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 01 november 2004 @ 18:53:
preg_match_all heb ik al geprobeerd, maar dat geeft niet de gewenste output.
Met de goede regexp geeft die wel degelijk de goeie output.
PHP:
1
2
3
$out = array();

preg_match_all("#<a href=[\"']?(.*)[\"']?[^>]*>([^<])</a>#iu", '<a href="http://www.google.com">test</a>', $out);

Nou krijg je de inhoud van de href en de bijbehorende tekst in de $out array.

Disclaimer: niet getest. :P

[ Voor 24% gewijzigd door NMe op 01-11-2004 20:05 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Niet echt netjes *kucht* maarre het werkt wel ;)

PHP:
1
2
3
$subject = "<a href=\"http://www.google.com\">Dit</a> is een test.";
preg_match_all("/(<a href=[\"'])(.*)(>.*<\/a>)/",$subject,$output);
echo substr($output[2][0],0,strlen($output[2][0])-1);


edit: NMe84 was me voor zie ik nu.. maar ik heb het wel getest :P

[ Voor 42% gewijzigd door Verwijderd op 01-11-2004 20:00 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik ben bang dat de jouwe nogal rare resultaten teruggeeft (3 verschillende match-variabelen :?), en dat ie case sensitive en greedy is. ;) (Niet dat de mijne geweldig mooi zal zijn, als bijvoorbeeld crisp die leest lacht ie zich vast dood. :+)
Mijn persoonlijke voorkeur gaat er naar uit om geen tekens te gebruiken voor de delimeters die ook gebruikt worden in de regexp zelf, vandaar dat ik liever # dan / gebruik in dit geval. :)

[ Voor 15% gewijzigd door NMe op 01-11-2004 20:09 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

offtopic:
echo substr($output[2][0],0,strlen($output[2][0])-1) = echo substr($output[2][0],0,-1)

Verwijderd

NMe84 schreef op 01 november 2004 @ 20:08:
Ik ben bang dat de jouwe nogal rare resultaten teruggeeft (3 verschillende match-variabelen :?), en dat ie case sensitive en greedy is. ;) (Niet dat de mijne geweldig mooi zal zijn, als bijvoorbeeld crisp die leest lacht ie zich vast dood. :+)
Mijn persoonlijke voorkeur gaat er naar uit om geen tekens te gebruiken voor de delimeters die ook gebruikt worden in de regexp zelf, vandaar dat ik liever # dan / gebruik in dit geval. :)
Hm als crisp dit leest idd, ook mijne (lees: vooral mijne) :X
Toenstraks ook al diep moeten schamen voor crisp ;)

Verwijderd

X-Lars schreef op 01 november 2004 @ 20:11:
offtopic:
echo substr($output[2][0],0,strlen($output[2][0])-1) = echo substr($output[2][0],0,-1)
Klopt ja, dom :X Weer eens totaal niet nagedacht 8)7

/me moet beter nadenken en niet meer dom posten

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 20:31

chem

Reist de wereld rond

PHP:
1
2
3
4
5
preg_match_all(
    '#<a.*?href\s*=\s*(["\']?)(.*?)\1[^>]*>[^<]*</a.*?>#is', 
    '<a href="http://www.google.com">test</a>', 
    $out, 
    PREG_SET_ORDER);

[ Voor 44% gewijzigd door chem op 01-11-2004 20:57 . Reden: kon het niet laten :+ ]

Klaar voor een nieuwe uitdaging.

Pagina: 1