Newsgroup: it.comp.java
Titolo: Help per una espressione regolare

Salve a tutti.
la situazione e' la seguente:
ipotiziamo la stringa str1 avente il seguente contenuto:
String str1 = "ciao:    paperino:.,#@?bye 3pluto2";
e la seguente istruzione:
String[] MyStringArray = str1.trim().toLowerCase().split( regExp );
Il (mio) blocco e' il seguente:
non riesco a trovare un espressione regolare adeguata da mettere in 
regExp per far si che da str1 mi ritorni:
- ciao
- paperino
- pluto
cioe', far si che vengano prese *solo* le stringhe contenenti i 
caratteri a-z (senza numeri e altri caratteri speciali) e maggiori di 3 
caratteri.
Non vi propongo la mia regExp per non influenzarvi, ma io fino adesso 
son riuscito solo ad estrapolare le stringhe contenenti i caratteri a-z 
(senza numeri e altri caratteri speciali), ma mi piglia anche le 
stringhe inferiori di 3 caratteri :(
quindi:
- ciao
- paperino
- bye
- pluto
Grazie a tutti per l'interessamento


Ciao Yatta,
non sono per nulla un esperto in regexp, quindi prendi quello che dico
con le molle.
Devi per forza usare split?
Che ne dici di:
		String source = "ciao:    paperino:.,#@?bye 3pluto2";
		String regexp = "([a-zA-Z]){4,}";
		Pattern pattern = Pattern.compile(regexp);
		Matcher mat = pattern.matcher(source);
		while (mat.find())
		{
			System.out.println(mat.group());
		}

 Devi per forza usare split?
La stringa sara' veramente moooooolto lunga (tanto, sul serio), e mi 
serve di questa un array formato dall'esplosione di questa stringa.
Poiche' il tutto deve risultare abbastanza performante, non posso fare 
Nmila cicli per crearmi l'array.
Ho provato split e risponde molto bene in quanto performance.
Effettivamente se ci fosse una qualche "reverse strip", cioe' che crea 
un array con solo gli elementi che fanno match, sarebbe decisamente comodo.
grazie per la dritta.
ciao
	MaX

 Nmila cicli per crearmi l'array.
split al suo interno fa *esattamente* la stessa cosa di quello che ti
hanno postato, solo che non hai il  
controllo su tutto. La strada giusta è dar retta al post  precedente ;)
uL
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Ecco l'espressione regolare che parrebbe funzionare :
"((([[^\\p{ASCII}][\\p{Digit}][\\p{Punct}][\\p{Blank}][\\p{Cntrl}][\\p{Space}][\\s][\\n]]+|\\G|\\A)(\\p{Alpha}{1,3}))([[^\\p{ASCII}][\\p{Digit}][\\p{Punct}][\\p{Blank}][\\p{Cntrl}][\\p{Space}][\\s][\\n]]+|(\\Z)))|([\\p{Digit}\\p{Punct}\\p{Blank}\\p{Cntrl}\\p{Space}\\s\\n])"
Miseria che combo, altro che Mortal Kombat :)
Ciao
	MaX

 "((([[^\\p{ASCII}][\\p{Digit}][\\p{Punct}][\\p{Blank}][\\p{Cntrl}][\\p{Space}][\\s][\\n]]+|\\G|\\A)(\\p{Alpha}{1,3}))([[^\\p{ASCII}][\\p{Digit}][\\p{Punct}][\\p{Blank}][\\p{Cntrl}][\\p{Space}][\\s][\\n]]+|(\\Z)))|([\\p{Digit}\\p{Punct}\\p{Blank}\\p{Cntrl}\\p{Space}\\s\\n])" 
Mi ero dimenticato un "+", sorry :
"((([[^\\p{ASCII}][\\p{Digit}][\\p{Punct}][\\p{Blank}][\\p{Cntrl}][\\p{Space}][\\s][\\n]]+|\\G|\\A)(\\p{Alpha}{1,3}))([[^\\p{ASCII}][\\p{Digit}][\\p{Punct}][\\p{Blank}][\\p{Cntrl}][\\p{Space}][\\s][\\n]]+|(\\Z)))|([\\p{Digit}\\p{Punct}\\p{Blank}\\p{Cntrl}\\p{Space}\\s\\n]+)"

YattaMaX ha scritto:

NON starai mica seriamente pensando di usare una cosa del genere...

 
Perche' no ?
io pensavo di si.
ciao
	MaX

 caratteri.
non sono un esperto di regexp.. ma credo che basterebbe un semplice
[a-z]{3,}
dove indichi che il numero minimo di caratteri che devono fare match è 
3. spero di non aver scoperto l'acqua calda! ciao!
-- 
stajune

stajune ha scritto:

E magari :)
Quel che tu dici l'ho provato proprio all'inizio, e non faceva cio' che 
mi serviva.
La regexp che fa quello che voglio e' un tantino piu' lunghetta :
"((([[^\\p{ASCII}][\\p{Digit}][\\p{Punct}][\\p{Blank}][\\p{Cntrl}][\\p{Space}][\\s][\\n]]+|\\G|\\A)(\\p{Alpha}{1,3}))([[^\\p{ASCII}][\\p{Digit}][\\p{Punct}][\\p{Blank}][\\p{Cntrl}][\\p{Space}][\\s][\\n]]+|(\\Z)))|([\\p{Digit}\\p{Punct}\\p{Blank}\\p{Cntrl}\\p{Space}\\s\\n]+)"
Non male come combo, e ? degna della mossa piu' incasinata di "Mortal 
Kombat" :)
Grazie
ciao
	MaX

 Kombat" :)
Prova a ridurla un po', a occhio sembra un po' ridondante. E poi ti
servono veramente tutte quelle 
proprietà unicode? Non ti bastano i classici \s \d \w ecc.? Già eliminando
tutti i p{xxxx} diventerebbe 
perlomeno lunga una sola riga :)


YattaMaX ha scritto:

!!!!!!! ma ti senti bene? ;)
hai un ' idea di quanto possa essere "performante" un orrore del
genere?
Senza parlare di chiarezza, mantenibilità e esetendibilità del
codice...
Se il tuo boss vede una cosa del gebere di licenzia su 2 piedi.. e fa
benissimo