View Full Version : [JAVA]Espressioni regolari
Ciao a tutti,
devo implementare un controllo su una stringa che può avere i seguenti formati_
nnnnnnnnnnnn
nnnnnn/nn/nn
annnnnnnnn
dove n=numero da 0 a 9, a= lettera da 'a' a 'Z'.
Stò provando da ore ad impostare una espressione reoglare da passare al metodo match ma non ottengo alcun rissultato...qualcuno mi può aiutare.
Grazie mille a tutte le anime pie che mi daranno una mano....:help:
la prima
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
la seconda
come la prima, con le barre
la terza, simile alla prima tranne che per la parte iniziale
[a-zAz]...
Così su due piedi mi sono venute queste soluzioni, sicuramente esiste un modo per dirgli di scrivere esattamente dodici cifre con un RE più breve.
Ciao
DanieleC88
25-11-2008, 11:19
Non sono certo un mago delle espressioni regolari, ma mi sa che devi tentare il match con tre pattern diversi, ovvero:
[0-9]\{12\}
[0-9]\{6\}/[0-9]\{2\}/[0-9]\{2\}
[a-zA-Z][0-9]\{9\}
Al limite puoi anche sostituire [a-zA-Z] con [[:alpha:]] e [0-9] con [[:digit:]].
Non sono certo un mago delle espressioni regolari, ma mi sa che devi tentare il match con tre pattern diversi, ovvero:
[0-9]\{12\}
[0-9]\{6\}/[0-9]\{2\}/[0-9]\{2\}
[a-zA-Z][0-9]\{9\}
Al limite puoi anche sostituire [a-zA-Z] con [[:alpha:]] e [0-9] con [[:digit:]].
e non si possono metter in or i tre pattern?
ah..mi sono dimenticato di aggiungere che la lunghezza non è costante....
e non si possono metter in or i tre pattern?
Certo. Basta metterli tra parentesi () separati da |.
([\d]{13}|[a-z]|....)
DanieleC88
25-11-2008, 11:35
[0-9]\{12\}\|[0-9]\{6\}/[0-9]\{2\}/[0-9]\{2\}\|[a-zA-Z][0-9]\{9\}
DanieleC88
25-11-2008, 11:37
Certo. Basta metterli tra parentesi () separati da |.
([\d]{13}|[a-z]|....)
Attento, devi fare l'escape della pipe per le espressioni regolari non estese. :D (EDIT: anche se non so come vengano trattate in Java, io solitamente mi affido al buon grep)
ah..mi sono dimenticato di aggiungere che la lunghezza non è costante....
Metti dei limiti minimi o massimi alle ripetizioni o sostituiscile con *.
Attento, devi fare l'escape della pipe per le espressioni regolari non estese. :D (EDIT: anche se non so come vengano trattate in Java, io solitamente mi affido al buon grep)
Metti dei limiti minimi o massimi alle ripetizioni o sostituiscile con *.
utilizzando * (ignorando lunghezza massima e minima delle sequenze numeriche) la imposterei così:
[0-9]*\|[0-9]*/[0-9]*/[0-9]*\|[a-zA-Z][0-9]*
Cosa ne pensate?
Ovviamente dichiarerei così il tutto:
String regex="[0-9]*\|[0-9]*/[0-9]*/[0-9]*\|[a-zA-Z][0-9]*"
MyString.match(regex)
E' corretto?
se uso \| ho degli errori quindi proverò con | e basta...
DanieleC88
25-11-2008, 13:09
Se è ciò di cui hai bisogno, allora è ok.
Grazie mille a tutti siete stati fondamentali... alla fine mi sembrava tutto + complesso di ciò che era in realtà.
Grazie ancora.;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.