Avatar billede cronaldo Nybegynder
13. marts 2005 - 00:32 Der er 23 kommentarer og
2 løsninger

Regular expressions

Jeg har et textarea, som man skal kunne skrive Eksperten.dk og så laver en str_replace eller preg_replace det om til <a href="http://www.eksperten.dk">Eksperten.dk</a>

P.S. emnet har jeg ikke selv fundet på! ;o)
Avatar billede detox Nybegynder
13. marts 2005 - 09:42 #1
Prøv:

$str = preg_replace("/(\[url=)([^\]]+)(\])([^\[]+)(\[\/url\])/", "<a href=\"$2\">$4</a>", $str);
Avatar billede coderdk Praktikant
13. marts 2005 - 09:54 #2
Eller:

$str = preg_replace("/\[url=(.*?)\](.*?)[\/url\]/si", "<a href=\"$1\">$2</a>", $str);
Avatar billede jakobdo Ekspert
13. marts 2005 - 10:02 #3
Ellers prøv at find programmet RegexBuddy, så bliver du mere eller mindre selv i stand til at lave dine regexp's fremover, super godt program!

http://www.regexbuddy.com/
Avatar billede cronaldo Nybegynder
13. marts 2005 - 12:07 #4
Det er skidt det koster penge :P
Avatar billede cronaldo Nybegynder
13. marts 2005 - 12:12 #5
Men detox, der er noget jeg ikke forstår en brik af: $2 og $4, hvor angives disse? :S
Avatar billede cronaldo Nybegynder
13. marts 2005 - 12:18 #6
Synes det var mest rimeligt!
Tusind Tusind tak for hjælpen!!!!
Avatar billede jakobdo Ekspert
13. marts 2005 - 12:18 #7
$1 = (\[url=)
$2 = ([^\]]+)
$3 = (\])
$4 = ([^\[]+)
$5 = (\[\/url\])
Avatar billede coderdk Praktikant
13. marts 2005 - 12:52 #8
$n skrives ofte som \\n også ;)
Avatar billede cronaldo Nybegynder
13. marts 2005 - 13:11 #9
Er der stadig nogle der gider svare? .. Hvis jeg nu skal lave det sådan at den skal tjekke den samme variabel for mange ting, hvad gør jeg så ?
Avatar billede jakobdo Ekspert
13. marts 2005 - 13:12 #10
Og hvis det nu var, så ville detox kunne "optimeres" til:
$str = preg_replace("/\[url=([^\]]+)\]([^\[]+)\[\/url\]/", "<a href=\"$1\">$2</a>", $str);

Der er ikke nogen grund til at bruge capture-klasser til noget som vi ikke skal bruge efterfølgende.
Avatar billede jakobdo Ekspert
13. marts 2005 - 13:13 #11
Cronaldo, den må du lige uddybe en smule?
Evt med et eksempel?
Avatar billede cronaldo Nybegynder
13. marts 2005 - 13:15 #12
ja, altså preg_replace skal BÅDE bruges til at tjekke om der er skrevet Blabla OG [img src=blabla.gif] .. hvis det er skal det erstattes med henholdsvis <a href="blabla">Blabla</a> og <img src="blabla">
Avatar billede cronaldo Nybegynder
13. marts 2005 - 13:35 #13
Jokbdo, eller en anden? .. Kan I ikke svare!?
Avatar billede cronaldo Nybegynder
13. marts 2005 - 13:37 #14
Jakobdo* :)

I skal nok få point i en anden tråd!!!!!
Avatar billede jakobdo Ekspert
13. marts 2005 - 13:39 #15
Jeg tror jeg ville gøre det ved at kalde preg_replace 2 gange! (er ikke skarp nok til at kunne sige om det kan gøres i en, men tror det ikke)
Avatar billede jakobdo Ekspert
13. marts 2005 - 13:40 #16
En anden ting, at kalde preg_replace 2 gange, er ikke det din side komme til at blive langsom af... Så kald den 2, eller flere... Ikke noget brugeren bemærker som sådan!
Avatar billede cronaldo Nybegynder
13. marts 2005 - 13:46 #17
jakobdo, det er mere det der skal stå inden i den, fordi med [img=blabla.gif] skal jeg jo ikke afslutte .. skal du ikke med en <img> jo !
Avatar billede jakobdo Ekspert
13. marts 2005 - 13:51 #18
$nytekst = preg_replace('/\\[img=([a-z0-9\\._-]*)\\]/', '<img src="$1">', $tekst);
Avatar billede cronaldo Nybegynder
13. marts 2005 - 13:53 #19
$indhold = $get['indhold'];

$indhold2 = preg_replace("/(\[url=)([^\]]+)(\])([^\[]+)(\[\/url\])/", "<a href=\"$2\">$4</a>", $indhold);

$indhold3 = preg_replace('/\\[img=([a-z0-9\\._-]*)\\]/', '<img src=\"$1\">', $indhold2);


<< det der virker ikke
Avatar billede cronaldo Nybegynder
13. marts 2005 - 15:10 #20
jakobdo!?
Avatar billede jakobdo Ekspert
13. marts 2005 - 16:07 #21
Hvad virker ikke?
Prøv at echo $indhold2 og 3 og se hvad output er!
Avatar billede coderdk Praktikant
13. marts 2005 - 19:03 #22
$replace = array(
      "/\[url=(.*?)\](.*?)[\/url\]/si" => "<a href=\"$1\">$2</a>"
      ,"/\[img=(.*?)\]/si" => "<img src=\"$1\" alt=\"\">$2</a>"
  );
$str = preg_replace( array_keys( $replace ), array_values( $replace ), $str );
Avatar billede coderdk Praktikant
13. marts 2005 - 19:03 #23
Hurra for copy/paste, det skulle have været:

$replace = array(
      "/\[url=(.*?)\](.*?)[\/url\]/si" => "<a href=\"$1\">$2</a>"
      ,"/\[img=(.*?)\]/si" => "<img src=\"$1\" alt=\"\">"
  );
$str = preg_replace( array_keys( $replace ), array_values( $replace ), $str );

:)
Avatar billede cronaldo Nybegynder
13. marts 2005 - 20:32 #24
Warning: Compilation failed: missing terminating ] for character class at offset 26 in /usr/home/mahunidk/domains/mahuni.dk/public_html/fmc/ec/index.php on line 142 << giver denne fejl, altså den sidste ..
Avatar billede coderdk Praktikant
13. marts 2005 - 20:41 #25
Oh, den manglede en \:

$replace = array(
      "/\[url=(.*?)\](.*?)\[\/url\]/si" => "<a href=\"$1\">$2</a>"
      ,"/\[img=(.*?)\]/si" => "<img src=\"$1\" alt=\"\">"
  );
$str = preg_replace( array_keys( $replace ), array_values( $replace ), $str );
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