Newsgroup: it.comp.www.php
Titolo: aiuto per regexp

Ciao a tutti
ho una regexp che dovrebbe controllare che la stringa possa iniziare per 
0 ed essere seguita da quattro caratteri alfanumerici o da barra 
inversa. Questo primo gruppo di 5 caratteri puo' esserci o no.
Successivamente deve controllare un secondo gruppo di 5 caratteri 
(separato dal precedente da uno spazio), che inizi per 1 e che sia 
seguito da quattro caratteri numero o barra inversa. Anche in questo 
caso il gruppo puo' esserci o no.
Il terzo gruppo, anche questo non obbligatorio, e' analogo al secondo ma 
deve iniziare con un 2
Infine, eventuali gruppi successivi non possono iniziare per 0, 1 o 2.
la regexp che ho creato e' la seguente:
 
if(preg_match('/^(0[0-9a-zA-Z-\/]{4})?\s*(1{1}[0-1-\/]{1}[0-9-\/]{3})?\s*(2{1}[0-1-\/]{1}[0-9-\/]{3})?\s*([3-9a-zA-Z\/]{1}[0-9a-zA-Z]*)*/', 
$line, $temp))
{ ...
non funziona nel caso in cui il gruppo 3 (quello che inizia per 2) e' 
preceduto dal gruppo 2 che inizia per 1 se e' seguito da caratteri 
alfabetici
Ad esempio:
1XXXX 20125
con mio grande disappunto non cattura il gruppo che inizia per 2, eppure 
secondo la mia logica, ma che evidentemente non e' la stessa di php, il 
gruppo che inizia per 1 semplicemente non soddisfa una parte di 
espressione regolare, ma non tutta.
A parte inserire nel pattern anche i caratteri alfabetici e poi fare un 
controllo a posteriori, qualcuno sa dirmi come fare per catturare il 
gruppo che inizia per 2 in questo caso?
Ed inoltre, ho visto su 
php.net
 la pubblicita' di questo libro
http://www.amazon.com/exec/obidos/ASIN/0596528124/wwwphpnet
qualcuno l'ha acquistato o letto e puo' darne un giudizio? e per caso 
qualcuno sa se verra' tradotto in italiano?
Grazie
Max

La logica dell'espressione regolare e del perche' non cattura il gruppo 
credo d'averla capita, pero' non ho capito come risolvere il problema
In sostanza servirebbe che anche se esiste il primo gruppo che inizia 
per 0, e/o esiste il secondo gruppo che inizia per 1, ed anche se i 
caratteri successivi di questi gruppi non corrispondono ai criteri della 
regexp, si possa procedere a valutare anche il terzo gruppo
e' possibile?
Grazie
Max



Secondo me ti stai complicando la vita per niente. E rendi la regexp
illeggibile.
Fai una serie di if, sono piu` leggibili.
Bye.

 Bye.
Dovrei cmq usare le regexp per valutare i singoli gruppi e a questo 
punto mi conviene procedere ad un controllo a posteriori
Il problema e' che lavoro su stringhe che dovrebbero soddisfare alcuni 
criteri standard, ma che in rari casi (pochissimi su migliaia), per 
errori di trasmissione dati o per altri motivi, non li soddisfano 
integralmente.
Grazie cmq
Max

 e' possibile?
se non corrispondono ai criteri non e' piu' una regexp ;)
puoi aggirare il parte il problema mettendo per i primi due gruppi una
ricorrenza {0,1}, in questo caso pero' dovresti evitare il ^ iniziale
fai delle prove e vedi se ti soddisfano

 in questo caso pero' dovresti evitare il ^ iniziale
E' fondamentale che inizi per 0, 1 o 2, nel caso iniziasse altrimenti 
devo buttar via la stringa e risciacquare bene ;-)
Credo d'aver capito che posso solo eseguire un controllo a posteriori 
sul gruppo che inizia per 1
Grazie e ciao
Max