Gå til innhold

Lite problem i regex


Anbefalte innlegg

Skrevet

Heisann.

 

Jeg har prøvd å sette meg inn i regex i det siste, men tydeligvis er ikke skillsa helt proffe ennå. Jeg har en tekststreng som forenklet ser slik ut: '(1)(2)(3)'.

 

Jeg vil finne frem til 1, 2 og 3, og prøvde med '/\((.*)\)/', men den vil kun trekke ut 1)(2)(3 som en hel substring, og ikke hvert tall som en substring hver. Jeg bruker forøvrig preg_match_all-funksjonen, og innholdet i hver parantes, vil endre seg helt tilfeldig. Noen som kan hjelpe meg med dette?

Videoannonse
Annonse
Skrevet (endret)

$txt = '(3)(7)(4)';

preg_match("/(\(.+\))(\(.+\))(\(.+\))/", $txt, $out);
echo $out['1']; // Skriver ut 3
echo $out['2']; // Skriver ut 7
echo $out['3']; // Skriver ut 4

 

Har ikke teste dette, og jeg vet ikke helt om jeg skjønte hva du mente. Men du kan jo prøve deg litt frem med hva jeg har gjort her :) - Plukke ut tallene fra parantesene så du har de i egne variabler.

Er egentlig ny i regexp jeg også, så mulig jeg er langt ute på jordet :p

Endret av onTop
Skrevet

Eventuelt kan du prøve noe slikt som følgende, hvor du ikke er avhengig at teksten inneholder akkurat tre tall.

 

preg_match_all ( '/\(([0-9]+)\)/', $text, $matches );

Skrevet

Takker og bukker. Fant ut at problemet mitt var at jeg brukte .* som "hvilket som helst tegn", og da lar den jo også parantesene komme gjennom. Noen som kan si meg hva jeg bør bruke når jeg skal ha hele setningen med norske tegn og slikt, inni ene parantesen? Burde jeg vel sagt, men akkurat tall valgte jeg som eksempel, men det er da altså ikke gitt. Jeg vil ha tall, bokstaver, mellomrom og norske tegn inne i parantesene.

Skrevet (endret)

<?php

$text = '(hokkus)(pokkus)(sim)(zalabim)';

preg_match_all ( '/\(([^(^)]+)\)/', $text, $matches );

echo '<pre>' . print_r ( $matches, true ) . '</pre>';

?>

 

Edit: ^ betyr ikke match, og uttrykket sier at alt, med unntak av paranteser, skal matche.

Endret av Jonas
Skrevet

OBS: Blir preg_match_all ( '/\(([^()]+)\)/', $text, $matches );, ikke som Jonas skrev preg_match_all ( '/\(([^(^)]+)\)/', $text, $matches );.. En ^ for mye ;)

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