Newsgroup: it.comp.www.php
Titolo: Espressioni regolari: parole con prima lettera maiuscola

E' la prima volta che mi imbatto in queste espressioni e sto perdendo una 
marea di tempo nel tentativo di comporne una che mi consenta l'eliminazione 
di parole con prima lettera maiuscola da una stringa.
Ho provato con:
$test = "PRIMA Secondo";
$test = ereg_replace("[^A-Z]+[a-z]", "", $test ); //il risultato cercato è 
$test = "PRIMA";
Ovviamente l'espressione che ho usato [^A-Z]+[a-z] non è corretta! :-(
Mi potete aiutare? 




Ti serve una espressione che descriva:
(spazio, se c'e') inizio-parola Maiuscola minuscola(quante ce n'e')
Quindi:
	Spazio		\s
	se c'e'		*
	inizio-parola	\b
	Maiuscola	[A-Z]
	minuscola	[a-z]
	quante ce n'e'	*
	fine-parola	\b		[controlla!]
Dovrebbe essere quindi
	$testo = preg_replace('#\s*\b[A-Z][a-z]*\b#', '', $testo);
...mi ricordo che ereg_replace e preg_replace usano sintassi un po'
diverse, ma sinceramente non ho voglia di guardarmi il manuale.
Leonardo
-- 
Enough, enough!  But stranger, ere we part,
Glancing farewell to each nefarious bier,
This warning would I beg you take to heart:
There is an end to e'en the worst career!


Ti ringrazio, era quello che mi serviva... ora vedo anche e soprattutto di 
capire come funziona. 

capire come funziona. 
PRIMA controlla se funziona, POI se mai ringrazia :-)
In teoria le cose le ricordo bene, in pratica spesso prendo solennissime
cantonate. Nel caso, segnala la cosa - cosi' il prossimo con un problema
simile non si infila in un vicolo cieco.
(Avessi avuto un php raggiungibile avrei controllato io, si capisce - ma
per un po' non ce l'avro', a meno di regalare un sacco di soldi a Wind).



Funziona, grazie :-)
Soltanto che se ho un nome composto tipo "D'ALESSIO Gigi" mi ritorna 
"'ALESSIO" :-( Cioè mi perdo la maiuscola prima dell'apostrofo... sto 
cercando di rimediare ma... cavolo... entrarci in queste reg exp non è 
facile per nulla... 

 facile per nulla...
Metti anche l'apostrofo tra le "maiuscole":
[^a_Z\'][a-z]*"
Se ho capito cosa vuoi ottenere.
Bye.

 Se ho capito cosa vuoi ottenere.
Allora la stringa di partenza è D'ALESSIO Gigi, praticamente devo eliminare 
il nome ed avere solo il cognome.
Con la tua correzione mi rimane ALESSIO, a me dovrebbe rimande D'ALESSIO.
Comunque, grazie. 

facile per nulla... 
Infatti, perche' "D" secondo lui e' una parola composta da una maiuscola
e basta (e questo e' quanto gli si richiedeva).
Se vuoi ELIMINARE solo le parole con la prima lettera maiuscola, _PERO'_
non lunghe una sola lettera, allora devi usare
	[A-Z][a-z]+	(maiuscola piu' minuscola almeno-una)
anziche'
	[A-Z][a-z]*	(maiuscola piu' minuscola quante-sono-sono)


Leonardo
In questo modo pero' ti lascia sia D che ALESSIO:
	D'ALESSIO Gigi => Gigi
...mi hai [1] fatto imbrogliare, era questo che volevi oppure l'opposto?
Leonardo
[1] o tu, o quel quartino di rosso; insomma, /qualcuno/ e' stato.



Ok, funziona...
Grazie! :-)
Ma, domanda: a parte le guide estese, possibile che in rete non riesca a 
trovare un link con esempi (piů sono meglio č) all'uso di reg exp? 

 trovare un link con esempi (piů sono meglio č) all'uso di reg exp?
Scusa ma cosa hai cercato?
regexp examples - circa 1.780.000 risulati
espressioni regolari esempi - circa 64.400 esempi

Magilla ha scritto:

---------------------------------------------^^^^^^ risultati...

 Ovviamente l'espressione che ho usato [^A-Z]+[a-z] non è corretta! :-(
Certo! [^A-Z] significa *nessuna* lettera maiuscola, perche' "^"
all'interno di parentesi quadre indica la negazione!
Avresti dovuto scrivere "^[A-Z]" per cercare all'inizio della stringa,
mentre se usi le regexp modellate su Perl (preg*) puoi usare il
metacarattere "\b" che indica il "confine di parola" (quindi se c'e' un
punto, uno spazio, una virgola, un "a capo", ...).
La sua negazione e' "\B", cioe' non c'e' un confine di parola in quella
posizione.
Astro