Newsgroup: it.lavoro.professioni.webmaster
Titolo: [RegExp] Ricerca e sostituzione caratteri

Vorrei sapere se esiste una espressione regolare che permetta di trovare 
determinati caratteri all'interno di una lista e di sostituirli altri 
caratteri di un'altra lista. Cioe' del tipo search (A or B or C or D or ...) 
replace with (A* or B* or C* or D* or ...).
Grazie in anticipo.
Romeo
-- 
http://www.brianzapopolare.it
http://digilander.libero.it/PRCseregno
 

 
se usi php...
http://it.php.net/manual/it/function.str-replace.php
Permette di sostituire vettori a vettori.
;)
-- 
Napolux
Bombing for peace is like fucking for virginity
http://napolux.altervista.org
http://napolux.deviantart.com


So che in php si puo' fare e l'ho gia' fatto. Il mio problema e' che vorrei 
usare una regesp dall'interno di un editor come Dreamweaver e Ultraedit.


 usare una regesp dall'interno di un editor come Dreamweaver e Ultraedit.
Ma allora la tua domanda non era stata postata con chiarezza. Ti serve
client side quindi? Ti serve Javascript?
Il fatto che usi dreamweaver o ultraedit non esplicita il linguaggio in
cui ti serve.
Se la vuoi in php già te l'hanno postata. Se la vuoi in Javascript, qui
trovi una soluzione rapida: 
http://www.criosoftware.it/default25.aspx
.
Se la vuoi in qualche altro linguaggio, dillo - magari ti si aiuta.
Luke S.
- may the clearness be with you -
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Interessante la soluzione in Javascript che tengo da parte per altri scopi. 
Tuttavia forse non era chiara la mia domanda. In effetti a me serviva una 
possibile espressione regesp, simile a quella in javascript,  allo scopo di 
ricercare e sestituire a livello di editor i caratteri accentati e speciali 
di pagine web gia' prodotte nel passato. Ora, sia Dreamweaver che Ultraedit 
permettono l'uso di regesp e sarebbero adatti se solo si potesse trovare una 
espressione che faccia la trasformazione richiesta in blocco. Pero' non sono 
del tutto convinto che le regesp siano applicabili.
Romeo 

 del tutto convinto che le regesp siano applicabili.
Dipende se come con Perl puoi usare qualcosa del tipo tr/lista1/lista2/ ove
sostituisci ai singoli caratteri di lista1 i corrispondenti di lista2. Per
esempio tr/abc/ABC sosituisce a con A, b con B e c con C.
Se devi sostituire un singolo carattere con una stringa, ad esempio à con
"a'" la cosa si complica visto che se non sbaglio "tr" sostituisce solo 1 a
1 :-)
Potresti usare uno script in Perl a cui dare in pasto i tuoi files.
Qualcosa del genere:
========cut here=========
@list = <*.{@ARGV}>;
foreach (@list){
	print "changing $_\n";
	changetext($_);
}
print "all done\n";
sub changetext{
 my $a=shift;
 open INFILE, "<", $a || die "cannot open source: $a\n";
 open OUTFILE, ">", "temp.tmp" || die "cannot open temp.tmp\n";
 while(<INFILE>){
##### sostituzione
##### tr/cerca/sostituisci/
##### modifica la riga seguente con quello che ti serve
	tr/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/;
#####
	print OUTFILE $_;
 }
 close INFILE;
 close OUTFILE;
 rename($a, $a.".originale");
 rename("temp.tmp", $a);
}
========cut here=========
Se lo esegui dandogli come parametro un estensione di file (html per
esempio) effettua la sostituzione in tutti i files con quell'estensione
della directory corrente. I files originale sono rinominati in .originale
per sicurezza.
Per carattere a stringa:
========cut here=========
@list = <*.{@ARGV}>;
foreach (@list){
	print "changing $_\n";
	changetext($_);
}
print "all done\n";
sub changetext{
 my $a=shift;
 open INFILE, "<", $a || die "cannot open source: $a\n";
 open OUTFILE, ">", "temp.tmp" || die "cannot open temp.tmp\n";
 while(<INFILE>){
	s/(.)/sostituzione($1)/eg;
	print OUTFILE $_;
 }
 close INFILE;
 close OUTFILE;
 rename($a, $a.".originale");
 rename("temp.tmp", $a);
}
sub sostituzione{
 $_=shift;
 SWITCH:{
####### sostituisci se corrisponde il carattere
####### metti qui le sostituzioni che vuoi
####### return "stringa sostitutiva" if /c/; #dove c e' il carattere
	return "a'" if /à/;
	return "e'" if /é/;
	return "i'" if /ì/;
	return "o'" if /ò/;
	return "u'" if /ù/;
####### se non corrisponde restituisci il carattere originale
	return $_;
 }
}
========cut here=========
Scritti in fretta, si puo' fare di meglio.
'bye