Gå til innhold

[Løst] Enkel regex


Anbefalte innlegg

Skrevet (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 av TheClown
Videoannonse
Annonse
Skrevet (endret)

Noe sånt som

 

\[~([0-9]+)~\]

 

[ og ] må ha \ foran seg fordi [] er "nøkkelord" i regex-verdenen.

Endret av OJodd
Skrevet

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.

  • 4 uker senere...
Skrevet

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.

Skrevet (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 av FraXinuS
Skrevet

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.

Skrevet (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 av Sebbert
Skrevet

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

Skrevet

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

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...