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

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

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.

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 18-09 21:53

Tux

preg_match_all() ? ;)

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


Acties:
  • 0 Henk 'm!

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);

Acties:
  • 0 Henk 'm!

Verwijderd

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

Acties:
  • 0 Henk 'm!

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..

Acties:
  • 0 Henk 'm!

  • 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.


Acties:
  • 0 Henk 'm!

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 ]


Acties:
  • 0 Henk 'm!

  • 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.


Acties:
  • 0 Henk 'm!

  • 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)

Acties:
  • 0 Henk 'm!

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 ;)

Acties:
  • 0 Henk 'm!

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

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

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