Avatar billede phpbegynder2004 Nybegynder
26. maj 2008 - 17:19 Der er 11 kommentarer og
1 løsning

Udtræk link med preg_replace

Hej,

Jeg vil gerne høre, om I kan hjælpe mig med noget preg_replace.
Jeg ønsker at trække et link ud fra en tekst. Denne tekst kan se således ud:

1) blabla <a href="LINK">GÅ herhen</a>
Eller
2) <a href="LINK">GÅ herhen</a>

Det jeg ønsker at udtrække, er LINK. Jeg har selv prøvet at flikke nedenstående sammen, men den virker kun på 2)- Den virker altså ikke, hvis der kommer noget tekst foran <a href.

$link = preg_replace('@<a href=[^>](.*?)\"\>.*?</a>@si', "\\1", $vaerdi);

På forhånd tak for hjælpen :)
Avatar billede jakobdo Ekspert
26. maj 2008 - 22:47 #1
En regexp ala: '%<a href="(.*?)">.*?</a>%si' burde være nok.

Dog vil den ikke virke efter hensigten på:

<a target="_blank" href="LINK" style="hest">Herhen</a>
Avatar billede coderdk Praktikant
27. maj 2008 - 12:20 #2
Trække link ud af en tekst? Så er det vel ikke preg_replace men noget i stil med:

$teksten = 'hej <a href="link1">hejsa</a> <a target="ehhehe" href=\'link2\' style="bleh">hehehe</a> hfd';
if ( preg_match_all( '/<a[^>]+href=[\'"](.*?)[\'"][^>]*>/si', $teksten, $matches ) )
{
  var_dump( $matches[1] );
}
else
{
  echo "Fandt intet";
}
Avatar billede phpbegynder2004 Nybegynder
27. maj 2008 - 16:55 #3
Fedt! coderdk's virker rigtig godt.
Der er kun ét link i teksten, og jeg har derfor ændret den til følgende:
preg_match( '/<a[^>]+href=[\'"](.*?)[\'"][^>]*>/si', $vaerdi, $link );

Hvis ønsker at sætte bold-tags omkring link teksten (i mit eksempel: <b>GÅ herhen</b>). Hvordan gør jeg så?
Avatar billede coderdk Praktikant
27. maj 2008 - 17:00 #4
Jeg forstår ikke helt spørgsmålet... Vil du stadig have et link (altså gøre linket fed)? Eller teksten der var et link gøres fed?
Avatar billede phpbegynder2004 Nybegynder
28. maj 2008 - 22:28 #5
Jeg ønsker at teksten skal blive fed!

Altså, jeg fandt ud af, at jeg behøvede to ting:
1) Trække et link ud af en tekst (solved!)
2) Hvis linket et lig $var, skal teksten gøres fed


Eksempel på 2)
blabla <a href="link">tekst</a> blabla

Skal blive til:
blabla <a href="link"><b>tekst</b></a> blabla
Avatar billede coderdk Praktikant
28. maj 2008 - 22:48 #6
hvorfor ikke bare et stylesheet?

<style type="text/css">
a {
  font-weight: bold;
}
</style>

så skal du ikke rette noget ;P
Avatar billede phpbegynder2004 Nybegynder
29. maj 2008 - 06:26 #7
Hehe.. Det kunne have været smart, men det er kun nogle enkelte links der skal være fede.
Og det drejer sig altså om dem, der befinder sig i $var. Jeg ønsker at udtrække dem og gøre dem fede.
Avatar billede jakobdo Ekspert
29. maj 2008 - 06:53 #8
Men stadig istedet for at bruge <b>link</link> kunne du så bruge:

<a href="link" class="fed">link</a> sammen med:

<style type="text/css">
a.fed {
  font-weight: bold;
}
</style>
Avatar billede coderdk Praktikant
29. maj 2008 - 12:33 #9
Enig med jakobdo, og så kan du bare:

$var = preg_replace( "/<a href/i",'<a class="fed" href', $var );

Med mindre jeg misforstår din $var :P
Avatar billede phpbegynder2004 Nybegynder
30. maj 2008 - 01:37 #10
Fedt nok! Læg et svar coderdk
Men tak for hjælpen til Jer begge to.
Hvis du vil have point, lægger du også bare et svar, jakobdo.
Avatar billede jakobdo Ekspert
30. maj 2008 - 07:01 #11
Jeg springer over, giv du dem bare til coderdk.
Avatar billede coderdk Praktikant
30. maj 2008 - 09:11 #12
ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester