Newsgroup: it.comp.www.php
Titolo: Numero romano in lettere maiuscole

Vorrei creare una funzione che trasformi in maiuscolo quelle parti di testo 
formate da numeri romani...
ho provato:
$stringa=preg_replace("/(.*?)(\s)([xiv]+)(\s)(.*)/i", 
"$1$2".strtoupper($3)."$4$5", $stringa);
ma crea errore :-( 

NFM ha scritto:

Quando utilizzi le espressini regolari per cerca di crearle il piu'
semplici ed il piu' versatili possibile. Inoltre se cerchi di
utilizzare un esempio preso dal manuale e' sempre meglio iniziare
replicandolo esattamente cosi com'e' indicato sul manuale e solo dopo
averlo fatto funzionare correttamente, iniziare a modificarlo pian
piano (es. nel tuo esempio manca il modificatore "e", l'utilizzo delle
backreferences e' scorretto, cosi' come il modo di chiamare la funzione
strtoupper()).
<?php 
$subject = 'Star Wars - Episodio vi - Il Ritorno dello Jedi';
$pattern = '#(\s)([mcdivxl]+)(\s)#sie';
$replace = "'\\1' . strtoupper('\\2') . '\\3'";
$result = preg_replace($pattern, $replace, $subject);
echo($result);
?>
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 $subject = 'Star Wars - Episodio vi - Il Ritorno dello Jedi';
  viene restituito correttamente "VI", ma anche "IL Ritorno"... non 
credo sia poi cosi' banale svolgere correttamente la conversione, 
perche' per esempio "Adesso vi presento il vi episodio di..." diventa 
molto difficile da trasformare. 8-o
  Ma non conviene scrivere i numeri romani in maiuscolo fin 
dall'inizio? ;-p
  Saluti e buone feste a tutti,
-- 
Gianfranco Bertozzi
http://www.locandamilu.it
Linux User #183585

   vorrei fare una domanda da inesperto. L'ho provata anche io, tanto 
  Ah... ehm... ci manca la domanda... *<8-)
  Volevo chiedere: e' corretto quel che ho pensato io? Esiste una 
soluzione semplice al problema proposto (e se si, quale)?
  Ancora auguri,


 molto difficile da trasformare.
E' appunto questo il problema con le espressioni regolari. Se il testo
contiene delle stringhe equiparabili a numeri romani (dal punto di
vista della costituzione), tutte queste stringhe verranno convertite. A
meno di poter utilizzare altri "delimitatori" per "circoscrivere" la
conversione, e' impossibile convertire correttamente solo i numeri
romani da minuscoli a maiuscoli in un testo, sopratutto se scritto in
italiano.
Se ad esempio vi fosse una struttura nel testo (es. i numeri romani
sono utilizzati sempre all'inizio di una nuova riga per la costruzione
di una lista numerata) allora sarebbe possibile ottenere una
conversione accurata senza errori, altrimenti c'e' sempre il rischio di
"convertire" stringhe aggiuntive.


 "convertire" stringhe aggiuntive.
  Infatti. Realizzare un programma che riconosca e converta tutti e 
solo i numeri romani in una frase qualsiasi e' veramente un problema 
grosso, allora. Anche la semplice delimitazione tra spazi 
non basta, visto che "vi" e "il" e altri son sempre 
possibili. Immaginavo giusto, meglio scriverli maiuscoli fin 
dall'inizio! ;-)
  Grazie ancora e buon Natale,


 migliorare. :-)
Scusate ma se mi posso permettere la soluzione parziale e' specificare solo 
il gruppo di 3 caratteri [xiv]+ visto che sono i piu' utilizzati.. certo 
esiste anche M C D e L, ma dubito che vengano usati spesso in titoli di 
film, titolo nobiliare o il nome di un Papa.
L'unico rischio e' il pronome "vi" e il verbo "vivi" ma in questo caso vivi 
non e' un numero romano e si puo' evitare e cambiare di nuovo.
Alla fine io l'ho risolto cosi'
$stringa=preg_replace("/(.*?)(\s|^)([xiv]+)(\s|$)(.*)/ie", 
"'\\1\\2'.strtoupper('\\3').'\\4\\5'", $stringa);
per voi e' inutile 1 e 5? Tra l'altro mi sembra indispensabile specificare 
che oltre allo spazio il numero puo' essere all'inizio o alla fine della 
stringa. 

 della riga
  Vero. Ci sarebbe anche da aggiungere le interpunzioni, allora: una 
frase come "L'hai visto Rambo vii?" non viene processata 
correttamente.
Per \1 e \5, e per quel poco (ma poco poco) che ne so, io direi 
che non servono. Puoi spiegarmi che differenza ci sarebbe togliendoli? 
Una cosa come:
$stringa=preg_replace("/(\s|^)([xiv]+)(\s|[!?;,:.]|$)/ie", 
  "'\\1'.strtoupper('\\2').'\\3'", $stringa);
  non si comporta allo stesso modo?
  Saluti e buon Natale,


  Saluti e buon Natale,
Buon Natale anche a te :-) 

 frase vengono ingranditi tutti.
  Comunque anche io ho sbagliato: nel modo che ho postato si 
ingrandiscono anche le "i" di "ripigliarsi" e via cosi'. La frase si 
riempie di numeri romani insomma. C'e' da lavorarci su... :-)
  Saluti,


 riempie di numeri romani insomma. C'e' da lavorarci su... :-)
Strano.. da me funziona bene.
se scrivo:
echo 
$stringa=preg_replace("/(\s|^)([xiv]+)(\s|[!?;,:.]|$)/ie","'\\1'.strtoupper('\\2').'\\3'", 
"ripigliarsi i");
restituisce:
ripigliarsi I

 $stringa=preg_replace("/(\s|^)([xiv]+)(\s|[!?;,:.]|$)/ie","'\\1'.strtoupper('\\2').'\\3'", 
  Errore mio. In \1 io avevo (\s|^|) e quella pipe di troppo faceva 
il danno... scrivendo sul NG l'avevo giustamente omessa... :-o
  Ora resta da risolvere il problema del: "Adesso vi presento Rambo 
vi!"... si lascia perdere, che dici? ;-)


 vi!"... si lascia perdere, che dici? ;-)
Non risolvibile con le espressioni regolari.
Dovresti costruire un sistema di processing di linguaggio naturale,
dove il sistema riesce a riconoscere soggetto, verbo, complemento, ecc.
La spesa non vale l'impresa quindi! :)
-- 
rob4you
www.outofmind.eu

 vi!"... si lascia perdere, che dici? ;-)
Ditemi il nome di un personaggio o il titolo di un film che ha il pronome 
"vi".
Vi presento i miei? :-)
Nemmeno quello esiste.

 
Da 
35mm.it
http://www.35mm.it/film/ricercaschedafilm.jsp?titolo=%vi%&fromtestata=true
Baciate chi vi pare
Vi presento Joe Black
Io vi dichiaro marito e... marito
La verità vi prego sull'amore
	Francesco

 ha scritto nel messaggio 
news:fl0h7q$rbm$1...@newsserver.cilea.it...

Ok, diciamo che un numero minimo di errori e' sempre tollerato in un 
programma :-D