PDA

Visualizza la versione completa : [PERL] Eliminare simbolo "/" in URL tramite espressioni regolari


Jack_89
31-01-2010, 22:43
Salve a tutti, volevo chierede se qualcuno poteva dirmi come creare un'estressione regolare che da un testo mi elimini in un uri il simbolo "/" perchè mi crea problemi e non riesco ad eliminarlo

Mich_
01-02-2010, 08:33
Risposta "pura RE":
/\///
slash backslash slash slash slash
oppure anche:
|\/||
che e` la stessa espressione, ma in cui la slash di separazione e` stata sostituita dal carattere barravert.
in entrambi i casi significa: sostituisci la slash con niente


Risposta ragionata.
A che ti serve il tutto? E` per passare la cosa attraverso la rete?
Perche` in molti linguaggi esistono le funzioni escape e unescape che codificano le url sostituendo i caratteri che "non passano" dalla rete (che hanno significato diverso e non possono quindi essere trasferiti cosi` come stanno)

Jack_89
01-02-2010, 16:42
Grazie mille!
comunque sto semplicemente analizzando un testo e la"/" mi creava qualche problema... posso farti un'altra domanda?

Mich_
01-02-2010, 18:04
Originariamente inviato da Jack_89
... posso farti un'altra domanda? Prova. Non so se poi sapro` rispondere, ma eventualmetne lo sa sicuramente qualcun altro.

Se la domanda e` collegata a questa, prosegui in questa discussionie, altrimenti aprine una nuova.

Jack_89
01-02-2010, 18:54
Se io voglio creare uno script per analizzare la percorrenza di determinate parole in un testo,
quando nello script ho scritto una lista determinata di parole,
come posso rendere possibile la scelta? perchè quando gli dico di stampare una qualsiasi delle parole, lui me le stampa tutte e non solo quella che voglio

Mich_
02-02-2010, 08:25
Originariamente inviato da Jack_89
Se io voglio creare uno script per analizzare la percorrenza di determinate parole in un testo,
quando nello script ho scritto una lista determinata di parole,
come posso rendere possibile la scelta? perchè quando gli dico di stampare una qualsiasi delle parole, lui me le stampa tutte e non solo quella che voglio
Cosa e` la "percorrenza"? I km tra l'inizio e la fine del testo? :)
Intendi forse "ricorrenza" (quante volte si ripete una determinata parola)?
Dove sono scritte le parole nello script? Di solito si mettono in un database, che puo` essere una variabile interna (stringa unica o array di stringhe) oppure un file a parte (consigliato se si vuole dare dinamicita` alla lista).

Comunque io ci vedo vari problemi di interpretazione nel tuo testo. Prova invece ad esprimerti con un codice (quello che hai provato ad es.).

Jack_89
02-02-2010, 08:42
uhmmmm si giusto :) ricorrenza...
Il testo è un corpus in un file a parte .txt ed è una raccolta di Joyce che c'è su liber liber.
io, scrivendo qualche termine, volevo strutturarlo in modo che una persola che usi questo programma, se cerce una determinata parola come "Ulisses" il programma gli restituisca il match in un file a parte con ogni volta che trova "Ulisses", ugualmente se volesse trovare "Dedalus", ecc...
comunque quello che ho scritto è questo (sotto)... ma così se scrivo o "Dedalus" o "Ulisses" mi estrae entrambi e non solo quello che volglio.

$input = shift;

$corpus_joyce = shift;


open CORPUS,$corpus_joyce;

while (<CORPUS>) {

$input = $_;


if ($input =~/Ulisses/) {print $input;}

elsif ($input =~/Dedalus/) {print $input;}

}

close CORPUS

scusa se formalmente non ho un giusto liguaggio :cry:

Mich_
02-02-2010, 09:44
Anzitutto quando si inserisce un codice e` opportuno usare i tag VB, altrimenti si perde la formattazioine e la cosa diventa piu` difficile da capire:
my $input = shift; # legge il primo input e lo salva nella variabile $input
my $corpus_joyce = shift; # legge il secondo input e salva in $corpus_joyce
open CORPUS,$corpus_joyce; # apre il file indicato dal secondo input

while (<CORPUS> ) { # loop sul file aperto - legge una riga
$input = $_; # salva la riga letta in $input (in questo modo sovrascrive la variabile)
if ($input =~/Ulisses/) { print $input; } # cerca se nella riga letta c'e` la parola Ulisses e stampa la riga
elsif ($input =~/Dedalus/) { print $input; } # se non c'e` Ulisses, cerca se c'e` Dedalus
}
close CORPUS
Nota che se in una singola riga c'e` Ulisses, non cerca se c'e` Dedalus, ma se nella singola riga non c'e` Ulisses, va a cercare Dedalus.

Forse il tuo intnto era una cosa del genere:
my $input = shift; # legge il primo input e lo salva nella variabile $input
my $corpus_joyce = shift; # legge il secondo input e salva in $corpus_joyce
my $line = ""; # prepara una variabile da usare nel loop

open CORPUS,$corpus_joyce; # apre il file indicato dal secondo input

if($input eq 'Ulisses') {
while ($line = <CORPUS> ) { # loop sul file aperto - legge una riga e slava in $line
if ($line =~/Ulisses/ ) { print $input; } # cerca se nella riga letta c'e` la parola Ulisses e stampa la riga
}
} elsif($input eq 'Dedalus') {
while ($line = <CORPUS> ) { # loop sul file aperto - legge una riga e slava in $line
if ($line =~/Dedalus/ ) { print $input; } # cerca se nella riga letta c'e` la parola Ulisses e stampa la riga
}
}
close CORPUS

Ci potrebeb anche essere il modo di scrivere qualcosa del tipo:
if ($line ~=/$input/) { print $input; }
Ma non ricordo piu` come e` la sintassi corretta.

Jack_89
02-02-2010, 13:48
Grazie per le dritte! :)
addesso l'ho provato a far girare, ma mi produce solo dei testi vuoti :(

Loading