TheClown Skrevet 25. august 2011 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
OJodd Skrevet 25. august 2011 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
Thomas. Skrevet 25. august 2011 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.
Sebbert Skrevet 17. september 2011 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.
Thomas. Skrevet 17. september 2011 Skrevet 17. september 2011 Det siste eksemplet tar ikke bare tall, men alt. Ja, har jeg sagt noe annet?
FraXinuS Skrevet 17. september 2011 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
Sebbert Skrevet 18. september 2011 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
Tom_ Skrevet 18. september 2011 Skrevet 18. september 2011 Kan du ikke bare bruke substr() ? echo substr("[~21~]",2,-2);
TheClown Skrevet 18. september 2011 Forfatter 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.
Sebbert Skrevet 20. september 2011 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
TheClown Skrevet 20. september 2011 Forfatter Skrevet 20. september 2011 Hadde gått an å fjerne de to første, og de to siste karakterene. Men kjørte regex denne gangen
Tom_ Skrevet 21. september 2011 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
Sebbert Skrevet 22. september 2011 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
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å