Gå til innhold

[Løst] Enkel regex


Anbefalte innlegg

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 av TheClown
Lenke til kommentar
Videoannonse
Annonse
  • 4 uker senere...

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

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 av FraXinuS
Lenke til kommentar

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

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 av Sebbert
Lenke til kommentar

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

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 :p

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...