Avatar billede superzapper Nybegynder
12. maj 2005 - 08:08 Der er 13 kommentarer og
1 løsning

Udelade gruppe

Hejsa, er der nogen der ved om man kan udelade en gruppe fra ens match i et regex. Meningen er at jeg f.eks vil finde url's ved at lede efter http:// men når jeg skriver mit match ud vil jeg gerne have protokollen udeladt - altså så http://www.tv2.dk giver resultatet www.tv2.dk
Avatar billede Slettet bruger
12. maj 2005 - 14:16 #1
Kan du ikke, efter at have sat http:// på det hele, fjerne det igen hvor du ikke vil have det?

$streng = preg_replace("#>http:\/\/#", ">", $streng);

Hvis det er php du bruger. Du kan også bruge str_replace, der er hurtigere end preg_replace.
Avatar billede superzapper Nybegynder
13. maj 2005 - 10:38 #2
Self. kan jeg det, men pointen var at jeg gerne ville have det gjort direkte i udtrykket da det vil være hurtigere...
Avatar billede Slettet bruger
13. maj 2005 - 13:56 #3
ok..
Avatar billede barklund Nybegynder
13. maj 2005 - 15:58 #4
Du gør det bare omvendt. Du grupperer resten af udtrykket og vælger kun at gøre noget ved denne del. Hvordan har du lavet det pt.?
Avatar billede superzapper Nybegynder
13. maj 2005 - 23:08 #5
Jeg er ikke helt med på hvad du mener. Kan du evt komme med et eksempel på hvordan jeg kan finde en url ved at lede efter http:// og udtrække url men uden at udtrykket har http:// med?!
Avatar billede barklund Nybegynder
13. maj 2005 - 23:24 #6
Hvis vi tager den noget forsimplede regel, at en url i en tekst er alt der starter med http:// og fortsætter indtil det første whitespace tegn (mellemrum, linjeskift med videre) så kan vi finde dem og lave dem til url'er - og lave link-teksten til url'en uden http:

$str = preg_replace("#http://(\S+)#i", "<a href=\"\\0\">\\1</a>", $str);

Så vil href blive til den fulde url (med http) men selve linket vil være urlen uden http.

You see?

--
Morten Barklund
Avatar billede superzapper Nybegynder
14. maj 2005 - 20:31 #7
Pointen er den samme som den første kommentar... Det jeg ville var ikke at bruge nogle metoder til at ændre strengen efterfølgende men derimod søge på en del af udtrykket men trække noget andet ud... Ser umiddelbart ud til det ikke er muligt kan jeg fornemme så jeg lukker bare spørgsmålet igen...
Avatar billede barklund Nybegynder
14. maj 2005 - 20:54 #8
Det kan du altså sagtens, men kan du ikke bare komme med et eksempel på, hvad du vil? Og hvis nu svaret var "nej, der kan man ikke", så skal du stadig ikke snuppe pointene selv - for i så fald var "nej" jo det rigtige svar (for ikke at tale om den indsats, folk i forvejen har gjort for dig). Men ingen forstår tydeligvis hvad du vil, så vi kan ikke hjælpe dig med en løsning.
Avatar billede superzapper Nybegynder
17. maj 2005 - 07:49 #9
Jeg kan ikke forklare det meget tydligere end at jeg vil kunne søge på noget og få de efterfølgende karakterer tilbage (som jeg har skrevet flere gange). Desuden har jeg ikke fået nogen som helst svar der har noget med det at gøre (alm. streng gymnastik er ikke at gøre en indsats da det er lige til for en hver). Konklutionen om at det ikke kunne lade sig gøre traf jeg selv da jeg ikke fik nogen brugbare svar - ergo er pointene til mig selv. Så op med hovedet og lad være at blive sur over trivialiteter :o)
Avatar billede roenving Novice
17. maj 2005 - 07:56 #10
Men som jeg forstår dig, indeholder barklund 13/05-2005 23:24:22 præcis hvad du ønsker, den er bare gjort helt færdig og lavet til et link ...

-- og hvis du kun vil have urlen uden at linket kommer med, skal du jo bare fjerne link-delene:

$str = preg_replace("#http://(\S+)#i", "\\1", $str);
Avatar billede superzapper Nybegynder
17. maj 2005 - 08:14 #11
Nej, den indeholder netop bare et udtryk det trækker det hele ud incl. "http://" og så fjerner han det bare fra efterfølgende vha replace - det er netop det hele opgaven går på at man skal undgå.
Avatar billede barklund Nybegynder
17. maj 2005 - 08:54 #12
Jeg trækker da ikke noget ud af strengen? Den matcher da kun på noget? Men vi kan da lave en look-behind og gøre det som:

$str = preg_replace("#(?<=http://)\S+#i", "\\0", $str);

Hvis det er det, du mener - så kommer http:// slet ikke med som en del af det matchede.

Men du har _stadig_ ikke lavet et eneste eksempel! Et godt valgt eksempel og _ingen_ ville være i tvivl om, hvad du mente.

--
Morten Barklund
Avatar billede superzapper Nybegynder
17. maj 2005 - 09:02 #13
Synes nu ikke der er så meget at være i tvivl om og desuden indeholder opgaven fra start af et eksempel. Never mind gider ikke bruge mere tid på det her da jeg har lavet en alternativ løsning..
Avatar billede barklund Nybegynder
17. maj 2005 - 09:13 #14
Du har ikke givet noget kontekst - altså hvordan det skal bruges. Dit spørgsmål kan fint besvares med en preg_replace i php. Men hvis det ikke er det, du skal bruge det til, så må du sige, hvad du skal bruge det til.

Men muligvis en look-behind er din løsning.
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
Kurser inden for grundlæggende programmering

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