Avatar billede x4all_dk Nybegynder
13. december 2007 - 12:09 Der er 11 kommentarer og
1 løsning

Antal ens karakterer angives

Hvem kan lave en smart funktion med regulært udtryk som kan:

Komprimere en string mht. en char, "A" og angiver
antallet af "A" totalt. F.eks:

Så input : "AAAGOKWEGAAwerokwG123AAAAA"

outputter: "A3GOKWEGA2werokwGffgA5"

... jeg har lavet det hvor jeg løber strengen igennem og "tæller" og erstattter, men jeg tror det kan laves pænere med et regulært udtryk.... så hvem kan det :)

takker!
Avatar billede erikjacobsen Ekspert
13. december 2007 - 12:31 #1
Hvad skete der med "G123" ?
Avatar billede barklund Nybegynder
13. december 2007 - 12:40 #2
Ja, det kan gøres med et regulært udtryk:

$text = "AAAbbbCCdEffGgHHiJJ";
$text = preg_replace("/([a-zA-Z])(\\1)+/e", "\"$1\".strlen($0)", $text);
print $text;
// outputter: "A3b3C2dEf2GgH2iJ2"

Det er vist det nemmeste, jeg lige kan komme på :)
Avatar billede smitten1 Nybegynder
13. december 2007 - 12:46 #3
hvis input kommer fra en usikker kilde, bør man nok kigge på http://dk.php.net/manual/da/function.preg-replace-callback.php i stedet for
Avatar billede x4all_dk Nybegynder
13. december 2007 - 13:05 #4
@erik:  ups, jeg fik vist smidt for meget væk i eksemplet :)

Prøver lige Barklunds kode om lidt!
Avatar billede x4all_dk Nybegynder
13. december 2007 - 13:14 #5
@barklund, det virker næsten som jeg ønsker det, men kan du fikse så
den KUN erstatter på to chars ?

Nemlig "A" og "+", så

$text = "AAAbb++++AAzzA";

giver: "A3bb+4A2zzA"

Det er nemlig præcist dette som jeg mangler en smart regulært udtryk til !

takker!
Avatar billede barklund Nybegynder
13. december 2007 - 13:21 #6
$text = "AAAbbb++++HHiJJ";
$text = preg_replace("/([A+])(\\1)+/e", "\"$1\".strlen(\"$0\")", $text);
print $text;
// outputter: "A3bbb+4HHiJJ"

Må det være :)

--
Morten Barklund
Avatar billede x4all_dk Nybegynder
13. december 2007 - 13:37 #7
@Baklund: Jeps. Det virker efter hensigten, takker! smid svar hvis du vil have point!
Avatar billede barklund Nybegynder
13. december 2007 - 14:08 #8
Oki :)
Avatar billede barklund Nybegynder
13. december 2007 - 14:10 #9
Når det nu kun af A og +, så skrives det nok nemmere som:

$text = preg_replace("/(A){2,}|(\+){2,}/e", "\"$1\".strlen(\"$0\")", $text);

Det er i hvert fald hurtigere at regne på for regexp-motoren, men knap så opdatérbart. :)

--
Morten Barklund
Avatar billede x4all_dk Nybegynder
13. december 2007 - 14:24 #10
Takker!
Avatar billede barklund Nybegynder
13. december 2007 - 14:41 #11
Og tak for points :)
Avatar billede erikjacobsen Ekspert
13. december 2007 - 14:44 #12
Det jeg egentlig var efter i mit indlæg tidligere: hvis der allerede står cifre i input, kan du ikke nødvendigvis vende teksten om igen.

"AAA4kat++" bliver til "A34kat+2" som bliver til ca. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkat++"
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

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