PDA

Visualizza la versione completa : [perl] match espressione regolare


Poker32
08-07-2010, 12:33
ciao a tutti,
sto cercando di comporre un'epsressione regolare che mi permetta di:

- identificare tutti i match che siano diversi da miosito.it, miosito.com, miosito.sottosito.it, miosito.altrosottosito.it, ecc...

devo creare quindi una funzione che passando l'indirizzo da analizzare mi faccia il match se è diverso da quelli nello schema presente.

io pensavo, ma senza grossi riscontri:

\.miosito[\..*]\.[it|com]

potete darmi una mano??

Mich_
08-07-2010, 14:04
Anzitutto devi chiarire se vuoi tutti i casi in cui e` presente miosito oppure e` assente.
(la RE proposta trova solo la presenza).

Comunque la tua RE ha un vulnus: richiede sempre che ci sia miosito.qualcosa.it (o .com).
Forse quello che volevi assomiglia a:
/\.miosito[\..+]?\.[it|com]/

Altro problema: il sottosito si esprime (di solito) con
sottosito.miosito.com
il che` porterebbe la RE ad essere del tipo:
/\.[.+\.]?miosito\.[it|com]/

Poker32
08-07-2010, 14:19
Ciao, grazie per la risposta..

allora, sottosito può essere presente come no.. dai domini che sto analizzando e che devo trattare il sottosito è espresso in quel modo e non come dici tu (che ovviamente so anche io esser la procedura giusta)..

quindi io vorrei che la RE matchasse tutto quello che non corrisponde a quanto indicato..

devo escludere da una funzione tutti i siti diversi da quelli che sto esaminando quindi gradirei il match quando sono diversi..

Mich_
08-07-2010, 14:44
In che linguaggio stai lavorando?

La richiesta se NON matcha si puo` fare piu` semplicemente tramite linguaggio di programmazione.

Ad esempio, se usi Perl, e volessi semplicemente verificare che la stringa NON contenga "miosito", si potrebbe fare una cosa del tipo:
my $str = "www.miosito.com"; # rispettivamente www.nonmiosito.com
if ($str !~ /\.miosito\./) {
print "non contiene miosito\n";
}

Poker32
08-07-2010, 14:48
ciao,
sono espressioni in perl ma non sto programmando su file..

è la configurazione di un programma che accetta RE in perl per effettuare alcune operazioni..

quindi posso usare solo la RE e non creare una funzione..

vorrei che quindi matchasse tutto quello che è diverso da quanto indicato

Mich_
08-07-2010, 15:41
Attenzione alla confusione.

Le RE sono un linguaggio a parte, riconosciuto in molti linguaggi (non in tutti in modo completo, ma la sintassi e` sempre la stessa)
Quindi non si puo` parlare di "RE in Perl", ma di RE interpretate sotto Perl

Quindi tu cerchi una RE che sia verificata se la stringa NON contiene ".miosito."
Non sono molto preparato in questo campo specifico.

Prova con
/(\.miosito\.){0}/

Poker32
09-07-2010, 11:47
si, è corretta la tua affermazione sulle RE, mi sono espresso male..

non mi funziona la RE che mi hai indicato, non c'è altro modo per "negare" una RE??

Mich_
09-07-2010, 11:53
Non lo so.

Pero` Shishii, il moderatore di questa sezione, a suo tempo mi aveva aiutato parecchio.
Puoi provare a chiedere il suo aiuto, magari tramite il bottone "Segnala ad un moderatore" in fondo ad ogni post.


Comunque mi sembra strano che il linguaggio che supporta le RE non abbia l'opzione negato.
Il risultato di una RE di solito e` un valore booleano, che dovrebbe essere semplice invertire.

Loading