TheClown Skrevet 25. august 2011 Del Skrevet 25. august 2011 (endret) Hei diskusjon.no! Jeg har en string som ser slik ut [~21~]. Hvordan kan jeg bruke regex til å hente ut 21? Tallet 21 kan være hvilket som helst tall, og i alle lengder. Burde ikke være så ille, men jeg er elendig på sånt. All hjelp mottas med et stort takk <3 Endret 25. august 2011 av TheClown Lenke til kommentar
OJodd Skrevet 25. august 2011 Del Skrevet 25. august 2011 (endret) Noe sånt som \[~([0-9]+)~\] [ og ] må ha \ foran seg fordi [] er "nøkkelord" i regex-verdenen. Endret 25. august 2011 av OJodd Lenke til kommentar
Thomas. Skrevet 25. august 2011 Del Skrevet 25. august 2011 Du kan gjøre det slik hvis du kun skal ha positive tall: <?php $test = '[~2577~]'; preg_match('/\[\~([0-9]+)\~\]/', $test, $i); echo $i[1]; ?> Eller bruk noe sånt som /\[\~(.+)\~\]/ hvis du skal ha negative tall eller andre ting. Lenke til kommentar
Sebbert Skrevet 17. september 2011 Del Skrevet 17. september 2011 Du kan gjøre det slik hvis du kun skal ha positive tall: <?php $test = '[~2577~]'; preg_match('/\[\~([0-9]+)\~\]/', $test, $i); echo $i[1]; ?> Eller bruk noe sånt som /\[\~(.+)\~\]/ hvis du skal ha negative tall eller andre ting. Det siste eksemplet tar ikke bare tall, men alt. /\[~(|-)[0-9]+~\]/ Denne tar både negative og positive tall, men ikke noe annet. Lenke til kommentar
Thomas. Skrevet 17. september 2011 Del Skrevet 17. september 2011 Det siste eksemplet tar ikke bare tall, men alt. Ja, har jeg sagt noe annet? Lenke til kommentar
FraXinuS Skrevet 17. september 2011 Del Skrevet 17. september 2011 (endret) Nei, men det er også et annet problem med regexen din. ".+" er grådig og vil matche så mye den kan. f.eks: preg_match('/\[\~(.+)\~\]/', 'abc [~-123~] abc [~123~] abc'); // Dette vil match "[~123~] abc [~123~]" som ikke er det du vil. // For å få det riktig må du bruke: preg_match('/\[\~(.+?)\~\]/', 'abc [~-123~] abc [~123~] abc'); // Eller preg_match('/\[\~-?(\d+)\~\]/', 'abc [~-123~] abc [~123~] abc'); Endret 17. september 2011 av FraXinuS Lenke til kommentar
Sebbert Skrevet 18. september 2011 Del Skrevet 18. september 2011 Det siste eksemplet tar ikke bare tall, men alt. Ja, har jeg sagt noe annet? Neinei, men jeg bare klarerer at den tar mer enn den skal Lenke til kommentar
Tom_ Skrevet 18. september 2011 Del Skrevet 18. september 2011 Kan du ikke bare bruke substr() ? echo substr("[~21~]",2,-2); Lenke til kommentar
TheClown Skrevet 18. september 2011 Forfatter Del Skrevet 18. september 2011 Regex er raskere og penere. Men denne saken er allerede løst i 2. post, så vi kan godt skrinlegge denne. Skjønner ikke hvorfor folk skal gjøre ting så vanskelig, tallet mellom [~ og ~] vil ALLTID være et positivt tall, så noe kjemperegex er ekstremt unødvendig. Lenke til kommentar
Sebbert Skrevet 20. september 2011 Del Skrevet 20. september 2011 (endret) Regex er raskere og penere. Men denne saken er allerede løst i 2. post, så vi kan godt skrinlegge denne. Skjønner ikke hvorfor folk skal gjøre ting så vanskelig, tallet mellom [~ og ~] vil ALLTID være et positivt tall, så noe kjemperegex er ekstremt unødvendig. Regex er langtifra raskere enn substring, den må parse selve stringen først. Men hvis du har et tall på mer/mindre enn 2 siffer, kommer substr() til å feile. Endret 20. september 2011 av Sebbert Lenke til kommentar
TheClown Skrevet 20. september 2011 Forfatter Del Skrevet 20. september 2011 Hadde gått an å fjerne de to første, og de to siste karakterene. Men kjørte regex denne gangen Lenke til kommentar
Tom_ Skrevet 21. september 2011 Del Skrevet 21. september 2011 Regex er raskere og penere. Men denne saken er allerede løst i 2. post, så vi kan godt skrinlegge denne. Skjønner ikke hvorfor folk skal gjøre ting så vanskelig, tallet mellom [~ og ~] vil ALLTID være et positivt tall, så noe kjemperegex er ekstremt unødvendig. Regex er langtifra raskere enn substring, den må parse selve stringen først. Men hvis du har et tall på mer/mindre enn 2 siffer, kommer substr() til å feile. echo substr("[~2~]",2,-2); // Output: 2 echo substr("[~21~]",2,-2); // Output: 21 echo substr("[~219~]",2,-2); // Outpur: 219 Lenke til kommentar
Sebbert Skrevet 22. september 2011 Del Skrevet 22. september 2011 Regex er raskere og penere. Men denne saken er allerede løst i 2. post, så vi kan godt skrinlegge denne. Skjønner ikke hvorfor folk skal gjøre ting så vanskelig, tallet mellom [~ og ~] vil ALLTID være et positivt tall, så noe kjemperegex er ekstremt unødvendig. Regex er langtifra raskere enn substring, den må parse selve stringen først. Men hvis du har et tall på mer/mindre enn 2 siffer, kommer substr() til å feile. echo substr("[~2~]",2,-2); // Output: 2 echo substr("[~21~]",2,-2); // Output: 21 echo substr("[~219~]",2,-2); // Outpur: 219 Åja, selvfølgelig Tenkte ikke på det Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå