PDA

Visualizza la versione completa : debole sulle RE


Claudio Vituzzi
20-09-2004, 01:48
Questo il codice per rendere cliccabile un e-mail:



$text =~ s/([\w\-\.]+\@[\w\-\.]+\.[\w\-]+)/<a href='mailto:$1'>$1<\/a>/g;


lo studiato ma non riesco ad usarlo come modello per creare un'alto codice per rendere cliccabile gli indirizzi web...(che inizino solo con http:// e non solo con www)

sono una schiappa con le RE!

Mich_
20-09-2004, 09:06
Chiaramente devi fare una cosa separata. Il tag e` leggermente diverso tra link e mailto:

Prova a vedere come ti sembra questo (anch'io sto studiando le RE, e prendo delle cantonate sonore).

$text =~ s/((http\:[\/\\]{2})|(www\.)??([\w\-]+?\.)+?([\w\-]+?[\/\\])+
[\w\-]+?(\.\w+)??(\#[\w\-]+)??(\?[\w\-]+)??/\<a href\=\'$^N\'\>$^N\<\/a\>/g;


Nota che ho usato $^N per il match.
Nota: ho inserito un "acapo", che nella RE dovrai togliere

In alternativa nel match devi usare (?...) per tutte le parentesi tranne quella piu` esterna se vuoi usare il $1

Claudio Vituzzi
20-09-2004, 13:01
Purtroppo il tuo codice non parte proprio....guarda,mi accontento che inizio sia con http:// che con www

magari semplifica tutto?

Mich_
20-09-2004, 15:01
Hai ragione: occorre cercare di limitare. poi quando va, si possono inserire gli altri pezzi.

Prova cosi`:

$text =~ s/((?http\:[\/\\]{2})|(?www\.)??.+)[ \>\"\']/\<a href\='$1'\>$1\<\/a\>/g;

Claudio Vituzzi
21-09-2004, 04:29
il mio interprete dice:



# Sequence (?h...) not recognized.
File 'Untitled'; Line 4


questo era il codice:



#!/perl

$text = "http://www.ciao.it";
$text =~ s/((?http\:[\/\\]{2})|(?www\.)??.+)[ \>\"']/\<a href\='$1'\>$1\<\/a\>/g;

print $text;

Mich_
21-09-2004, 08:17
Ho ri-trovato il posto del manuale dove sono citate le parentesi (http://www.perldoc.com/perl5.8.4/pod/perlre.html#Extended-Patterns). La sintassi e` (?: (avevo dimenticato i duepunti).

Quindi:
$text =~ s/((?:http\:[\/\\]{2})|(?www\.)??.+)[ \>\"\']/\<a href\=\'$1\'\>$1\<\/a\>/g;

Occhio alle backslash. Il forum se ne e` mangiate alcune.
Fai un quote del messaggio prima del copia-incolla.

Nota: La fine della stringa io la ho pensata con uno dei caratteri:
spazio, maggiore, virgolette, apice
Ma magari vuoi un controllo migliore, magari riprendendo il carattere iniziale:
$text =~ s/(\=|[ \"\'])((?:http\:[\/\\]{2})|(?www\.)??.+)\>|\1/\<a href\=\'$2\'\>$2\<\/a\>/g;

Claudio Vituzzi
21-09-2004, 14:37
# Sequence (?w...) not recognized.

Mich_
21-09-2004, 15:33
Idem come sopra: mancano i duepunti anche li`.

Loading