Newsgroup: it.comp.lang.perl
Titolo: matching

gentili,
ho questo, ed altri stralci di html, dal quale voglio estrarre TUTTI gli
indirizzi mail presenti.
IO ho implementato queste espressione, che a logica dovrebbe riversare tutti
i match nell' array:
@ref =$rout =~ m/<a href="mailto:(.+@.+)">?/;
ma, ne ottengo solo il primo, e non il secondo, che se notate и esattamente
attiguo. Perche ?
grazie
<tr>
<td width="100%" height=17 colspan=5 bgcolor="#B04620">
<div class="navi">|&nbsp;<a href="../index.html"
tppabs="
http://footwear.com.ua/index.html
">главная</a>&nbsp;|&nbsp;<a
href="../add/index.htm"
tppabs="
http://footwear.com.ua/add/
">добавить</a>&nbsp;|&nbsp;<a
href="../news/index.html"
tppabs="
http://footwear.com.ua/news/index.html
">новости</a>&nbsp;|&nbsp;<a
href="../article/index.html"
tppabs="
http://footwear.com.ua/article/index.html
">статьи</a>&nbsp;|<!--&nbs
p;<a href="../dictionary/index.html"
tppabs="
http://footwear.com.ua/dictionary/index.html
">словарь</a>&nbsp;|-->&
nbsp;<a href="javascript:if(confirm('
http://footwear.com.ua/forum
 \n\nThis
file was not retrieved by Teleport Pro, because it was redirected to an
invalid location. You should report this problem to the site\'s webmaster.
\n\nDo you want to open it from the
server?'))window.location='
http://footwear.com.ua/forum
'"
tppabs="
http://footwear.com.ua/forum
">форум</a>&nbsp;|&nbsp;<a
href="../ad/index.html"
tppabs="
http://footwear.com.ua/ad/index.html
">реклама</a>&nbsp;|&nbsp;<a
href="../webmaster/index.html"
tppabs="
http://footwear.com.ua/webmaster/index.html
">веб-мастерам</a>&nbsp;|
&nbsp;<a href="mailto:
sup...@footwear.com.ua
"><a
href="mailto:
ob...@bigmir.net
">поддержка</a>&nbsp;|</div>
</td>
</tr>

 attiguo. Perche ?
Perché ti sei dimenticato il modificatore /g :
     @ref = $rout =~ m/<a href="mailto:(.+@.+)">?/g;
Detto questo, la tua regex darebbe comunque problemi, perché le 
sottoregex ".+" sono troppo /ingorde/.
Questa regex già andrebbe meglio:
     @ref = $rout =~ m/<a href="mailto:(.+?@.+?)">?/g;
ma per matchare gli indirizzi di email conviene comunque usare un 
qualche modulo CPAN (ne sono stati già segnalati), perché si tratta di 
un problema estremamente insidioso.
Ciao,
Emanuele.

grazie, proverò !
"Emanuele Zeppieri" <emazep@REMOVE_THIStiscali.it> ha scritto nel messaggio
news:rD6_f.75019$A83.1...@twister1.libero.it...


no, anche come hai ricorretto la regex, mi ritorna sempre e solo il primo
indirizzo mail, giacche invece che processare ogni riga in un
foraech{@ref.....}, ho ricompattato tutto su unica stringa:
@file = <HTML>;
$file = join'',@file;
@ref = $file = ~ m//;
.....
....
... ma dico Io, entrambe sono corrette, perche cazzo non restituisce quanto
richiedo !!!
PS. con la
use Email::Address;
@maill = Email::Address->parse($rout);
se il modulo è applicato a $file = join('',@file), allora restituosce un
array con soli 3 o 4 indirizzi, contrariamente alla pagina che ne contiene
almeno 30, se invece è applicato a ciascunariga di html, presa
separatamente, restituisce ugualmente soltanto il primo dei due i9ndirizzi
mail presenti !!!
cosa pensi / pensate ?
"Emanuele Zeppieri" <emazep@REMOVE_THIStiscali.it> ha scritto nel messaggio
news:rD6_f.75019$A83.1...@twister1.libero.it...


 cosa pensi / pensate ?
Penso che tu abbia bisogno di un paio di occhiali ;-)

 @ref = $file = ~ m//;
Inoltre qui sarebbe meglio sopprimere i newline, che c'è il rischio che 
capitino proprio in mezzo ad un indirizzo di email, stando all'esempio 
che hai postato:
@file = <HTML>;
map {chomp} @file; # Aggiungi questa linea.
$file = join'',@file;
@ref = $file = ~ m//;
Ancorché inguardabile, questo funziona alla perfezione con il testo 
d'esempio che hai postato tu, estraendo correttamente i 2 indirizzi di 
email presenti (per scrupolo ho provato giusto adesso, che me tocca fa' :-(
Se a te non funziona, stai facendo dei casini di cui non ho idea (magari 
hai qualche spazio di troppo (ad es. prima o dopo "href"), perché la 
regex che hai postato non ne prevede).
Ciao,
Emanuele.

 @ref = $file = ~ m//;
                    ^^^
Ovviamente qui devi mettere la regex *corretta* (quella della mia prima 
risposta).



</a></noscript><!-- SpyLOG  --><img 
src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=4>
<
!--Ra...@Mail.ru
 COUNTER--><script 
language="JavaScript"><!--
d=document;a='';a+=';r='+escape(d.referrer)
js=10//--></script><script 
language="JavaScript1.1"><!--
a+=';j='+navigator.javaEnabled()
js=11//--></script><script 
language="JavaScript1.2"><!--
s=screen;a+=';s='+s.width+'*'+s.height
a+=';d='+(s.colorDepth?s.colorDepth:s.pixelDepth)
js=12//--></script><script 
language="JavaScript1.3"><!--
js=13//--></script><script 
language="JavaScript"><!--
d.write('<a href="
http://top.mail.ru/jump?from=352977"'
+
' 
target=_top><img src="
http://top.list.ru/counter'
+
'?id=352977;t=239;js='+js+a+';rand='+Math.random()+
'" 
alt="
Ðåéòèíã@Mail.ru"'+'
 border=0 
height=31 width=88></a>')
if(js>11)d.write('<'+'!-- 
')//--></script><noscript><a
target=_top 
href="javascript:if(confirm('
http://top.mail.ru/jump?from=352977
  \n\nThis 
file was not retrieved by Teleport Pro, because it is addressed on a domain or 
path outside the boundaries set for its Starting Address.  \n\nDo you want 
to open it from the 
server?'))window.location='
http://top.mail.ru/jump?from=352977
'" tppabs="
http://top.mail.ru/jump?from=352977"><img
src="../../
top1.list.ru/counter-js=na;id=352977;t=239.gif
" 
tppabs="
http://top.list.ru/counter?js=na;id=352977;t=239
"
border=0 
height=31 width=88
alt="
Ðåéòèíã@Mail.ru"></a></noscript><script
 
language="JavaScript"><!--
if(js>11)d.write('--'+'>')//--></script><!--/COUNTER--><img 
src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=4 border=0><!--LEGPROM COUNTER--><img 
src="../../
cnt.legprom.ru/cgi-bin/cnt.cgi-id=2588.gif
" tppabs="
http://cnt.legprom.ru/cgi-bin/cnt.cgi?id=2588
"
width=1 
height=1 alt="" border=0><a target=_top 

href="javascript:if(confirm('
http://www.legprom.ru/
  \n\nThis file was 
not retrieved by Teleport Pro, because it is addressed on a domain or path 
outside the boundaries set for its Starting Address.  \n\nDo you want to 
open it from the server?'))window.location='
http://www.legprom.ru/
'" tppabs="
http://www.legprom.ru/"><img
 
src="../../
www.legprom.ru/img/bs5.gif
" tppabs="
http://www.legprom.ru/img/bs5.gif
"
width=88 
height=31 alt="Ðåéòèíã LegProm.Ru" border=0></a>
<!--LEGPROM 
COUNTER--><img src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=4 border=0>
<!-- bigmir)net TOP 100 --><a 
href="javascript:if(confirm('
http://www.bigmir.net/?cl=30049
  \n\nThis file 
was not retrieved by Teleport Pro, because it is addressed on a domain or path 
outside the boundaries set for its Starting Address.  \n\nDo you want to 
open it from the server?'))window.location='
http://www.bigmir.net/?cl=30049
'" 
tppabs="
http://www.bigmir.net/?cl=30049
" 
target=_blank><script language="javascript"><!--
bmQ='<img 
src=
http://c.bigmir.net/?s30049&t0
'
bmD=document
bmD.cookie="b=b"
if(bmD.cookie)bmQ+='&c1'
//--></script><script 
language="javascript1.2"><!-- 

bmS=screen;bmQ+='&d'+(bmS.colorDepth?bmS.colorDepth:bmS.pixelDepth)+"&r"+bmS.width;
//--></script><script 
language="javascript"><!--
bmF = 
bmD.referrer.slice(7);
((bmI=bmF.indexOf('/'))!=-1)?(bmF=bmF.substring(0,bmI)):(bmI=bmF.length);
if(bmF!=window.location.href.substring(7,7+bmI))bmQ+='&f'+escape(bmD.referrer);
bmD.write(bmQ+" 
border=0 width=88 height=31 alt='bigmir 
TOP100'>");
//--></script></a><img src="../im/1.gif" 
tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=4 border=0><!--begin of Top100 logo-->
<a 
href="javascript:if(confirm('
http://top100.rambler.ru/top100/
  \n\nThis 
file was not retrieved by Teleport Pro, because it is addressed on a domain or 
path outside the boundaries set for its Starting Address.  \n\nDo you want 
to open it from the 
server?'))window.location='
http://top100.rambler.ru/top100/
'" tppabs="
http://top100.rambler.ru/top100/
">
<img 
src="../../
top100-images.rambler.ru/top100/banner-88x31-rambler-gray2.gif
" 
tppabs="
http://top100-images.rambler.ru/top100/banner-88x31-rambler-gray2.gif
" 
alt="Rambler's Top100" width=88 height=31 border=0></a>
<!--end 
of Top100 logo 
-->
</td></tr></table></td>


 


<!--***************** S T O L B I K   
N O V O S T E Y **************** -->
<td width=4><img 
src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=4></td><td valign="top" align="center" 
width=135><img src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=8 width=1><br>
<!--%%news column 
start%%-->
<table width="135" border="0" cellspacing="0" 
cellpadding="0" bordercolor="#B04620"><tr><td colspan=3 height=17 
bgcolor="#B04620" valign="top"><p 
class="nazv">Íîâîñòè</p></td></tr><tr><td width=1 
bgcolor="#B04620"><img src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=1></td><td valign="top"><img src="../im/1.gif" 
tppabs="
http://footwear.com.ua/im/1.gif
" 
height=5 width=1><br><p class=spis>04.04.06 <a 
href="../news/adidas664.html" tppabs="
http://footwear.com.ua/news/adidas664.html">"Íàéê
" 
ïëîòíî "ïîîáåäàë" - îáåäîì ïîñëóæèë "Àäèäàñ", êîòîðûé íåçàäîëãî äî ýòîãî, 
"ïîçàâòðàêàë" "Ðèáîêîì"</a></p><br><p 
class=spis>03.04.06 <a href="../news/shoes663.html" tppabs="
http://footwear.com.ua/news/shoes663.html">«Íàéê
» 
âûïóñòèë ïåðâûå â ìèðå êðîññîâêè íà êàáëóêàõ ñïåöèàëüíî äëÿ Ìàðèè Øàðàïîâîé. 
</a></p><br><p class=spis>31.03.06 <a 
href="../news/662.html" tppabs="
http://footwear.com.ua/news/662.html">Âåñåííèå
 
õèòû: âîçâðàùåíèå îáóâíîé ëåãåíäû


 


</a></p><br><p 
class=spis>30.03.06 <a href="../news/shoes661.html" tppabs="
http://footwear.com.ua/news/shoes661.html">ÇÄÎÐÎÂÓÞ
 
ÎÁÓÂÜ ÑÎÇÄÀËÈ Â ÍÈÈ ÊÎÆÅÂÅÍÍÎ-ÎÁÓÂÍÎÉ ÏÐÎÌÛØËÅÍÍÎÑÒÈ 
</a></p><br><p class=spis>29.03.06 <a 
href="../news/adidas660.html" tppabs="
http://footwear.com.ua/news/adidas660.html">Êîìïàíèÿ
 
Adidas ïðîäëèëà êîíòðàêò ñî Ñòåëëîé Ìàêêàðòíè äî 2010 
ãîäà.</a></p><br><p class=spis>28.03.06 <a 
href="../news/sport659.html" tppabs="
http://footwear.com.ua/news/sport659.html">Êîìïàíèÿ
 
"Ñïîðòìàñòåð" îòêðûâàåò â Ïåòåðáóðãå ñåòü "êîíöåïòóàëüíûõ" îáóâíûõ ìàãàçèíîâ 
FootTerra. </a></p><br><p class=spis>27.03.06 <a 
href="../news/adidas658.html" tppabs="
http://footwear.com.ua/news/adidas658.html">Æèòåëè
 
Áåðëèíà ïðèíÿëè ó÷àñòèå â óíèêàëüíîé êàìïàíèè Adicolor îò 
Adidas</a></p><br></td><td width=1 
bgcolor="#B04620"><img src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=1></td></tr><tr><td colspan=3 height=1 
bgcolor="#B04620"><img src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=1></td></tr><tr><td colspan=3><img 
src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=10 width=1></td></tr><tr><td colspan=3 height=17 
bgcolor="#B04620" valign="top"><p 
class="nazv">Ðåêëàìà</p></td></tr><tr><td width=1 
bgcolor="#B04620"><img src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=1></td><td valign="top" align="center"><img 
src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=13 width=1><br>
<center>
<!-- Ukrainian Banner 
Network 100x100 START -->
<script>
//<!--
user = 
"13078";
page = "2";
pid = Math.round((Math.random() * (10000000 - 
1)));
document.write("<iframe src='
http://banner.kiev.ua/cgi-bin/bi.cgi?h
" 
+
user + "&"+ pid + "&" + page + "&2' frameborder=0 vspace=0 
hspace=0 " +
" width=100 height=100 marginwidth=0 marginheight=0 
scrolling=no>");
document.write("<a 
href='
http://banner.kiev.ua/cgi-bin/bg.cgi
?" +
user + "&"+ pid + "&" 
+ page + "&2' target=_top>");
document.write("<img border=0 
src='
http://banner.kiev.ua/
" +
"cgi-bin/bi.cgi?i" + user + "&" + pid + 
"&" + page +
"&2' width=100 height=100 alt='Óêðàèíñêà\ÿ áàííåðíà\ÿ 
ñåòü'></a>");
document.write("</iframe>");
//-->
</script><br><br>
<a 
href="javascript:if(confirm('
http://banner.kiev.ua/
  \n\nThis file was not 
retrieved by Teleport Pro, because it is addressed on a domain or path outside 
the boundaries set for its Starting Address.  \n\nDo you want to open it 
from the server?'))window.location='
http://banner.kiev.ua/
'" tppabs="
http://banner.kiev.ua/
" 

target=_top><img src="../../
banner.kiev.ua/dividers/d100-1.gif
" 
tppabs="
http://banner.kiev.ua/dividers/d100-1.gif
" 

width="100" height="15" border="0" alt="Óêðàèíñêèå 
100x100"></a><br><br>
<script>
//<!--
user 
= "13078";
page = "2";
pid = Math.round((Math.random() * (10000000 - 
1)));
document.write("<iframe src='
http://banner.kiev.ua/cgi-bin/bi.cgi?h
" 
+
user + "&"+ pid + "&" + page + "&2' frameborder=0 vspace=0 
hspace=0 " +
" width=100 height=100 marginwidth=0 marginheight=0 
scrolling=no>");
document.write("<a 
href='
http://banner.kiev.ua/cgi-bin/bg.cgi
?" +
user + "&"+ pid + "&" 
+ page + "&2' target=_top>");
document.write("<img border=0 
src='
http://banner.kiev.ua/
" +
"cgi-bin/bi.cgi?i" + user + "&" + pid + 
"&" + page +
"&2' width=100 height=100 alt='Óêðàèíñêà\ÿ áàííåðíà\ÿ 
ñåòü'></a>");
document.write("</iframe>");
//-->
</script></center>
<!-- 
Ukrainian Banner Network 100x100 END -->
<img src="../im/1.gif" 
tppabs="
http://footwear.com.ua/im/1.gif
" 
height=13 width=1></td><td width=1 bgcolor="#B04620"><img 
src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=1></td></tr><tr><td colspan=3 height=1 
bgcolor="#B04620"><img src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=1></td></tr></table>
<!--%%news column 
finish%%-->
<br><font class="copyR">&copy; <a 
href="../index.htm" tppabs="
http://footwear.com.ua/
" target="_blank" 
onmouseover="build_lnk(this,'ht' + 'tp://' + 'ecom-ua' + 
'.net');">eCOM</a> 
2001-2005</font><br><br></td><td width=4 ><img 
src="../im/1.gif" tppabs="
http://footwear.com.ua/im/1.gif
" 
height=1 width=4></td></tr>


 


<!--****************  S R E D N Y 
A     C H A S T ***************-->


 


</table>
</body>
</html>


 


"Emanuele Zeppieri" <emazep@REMOVE_THIStiscali.it> ha 
scritto nel 
messaggio
news:c5g_f.75767$A83.1...@twister1.libero.it...


On Tue, 11 Apr 2006, GahanaWay wrote:
[cut!]
Non e' bene postare 1,196 linee di messaggio su
un newsgroup!
Metti il file in una locazione accessibile via web
e posta il link.
  Raffaello

 ha scritto nel messaggio
news:Pine.OSF.4.63.06...@harry.molgen.mpg.de...


 gentilmente cercano di aiutarmi, a nessuno ;-)
Non lo metto in dubbio ;-)
Perт capisci bene che se ad ogni messaggio posti codice diverso (almeno 
in apparenza) e nuovi dati di test, la cosa contribuisce a generare 
confusione, piuttosto che aiutare ad isolare il problema.
Ora esegui questo snippet, copiandolo esattamente cosм com'и nel tuo 
ambiente di sviluppo (i dati sono stati messi in una sezione __DATA__, 
quindi non c'и bisogno di un file esterno).
La stampa generata dallo script и esattamente la seguente:
sup...@footwear.com.ua
ob...@bigmir.net
che dovrebbe essere proprio quello che serve a te, se ho capito bene (se 
ho capito male dimmelo).
Se a te non funziona, dimmi *esattamente* cosa ottieni in stampa.
Se invece ti funziona, puoi iniziare ad aggiungere progressivamente le 
restanti righe del tuo file nella sezione __DATA__, fermandoti non 
appena ottieni un risultato anomalo, nel qual caso dovresti essere in 
grado di isolare i dati di test che generano il problema.
A quel punto puoi postare le righe incriminate (possibilmente non piщ di 
una decina) cosм cerchiamo di capire di cosa si tratta. OK?
=cut
@file = <DATA>;
chomp @file;
$file = join '', @file;
@ref = $file =~ m/<a href="mailto:(.+?@.+?)">/g;
print join "\n", @ref;
__DATA__
<div class="navi">|&nbsp;<a href="../index.html" 
tppabs="
http://footwear.com.ua/index.html
">главная</a>&nbsp;|&nbsp;<a 
href="../add/index.htm" 
tppabs="
http://footwear.com.ua/add/
">добавить</a>&nbsp;|&nbsp;<a 
href="../news/index.html" 
tppabs="
http://footwear.com.ua/news/index.html
">новости</a>&nbsp;|&nbsp;<a 
href="../article/index.html" 
tppabs="
http://footwear.com.ua/article/index.html
">статьи</a>&nbsp;|<!--&nbsp;<a 
href="../dictionary/index.html" 
tppabs="
http://footwear.com.ua/dictionary/index.html
">словарь</a>&nbsp;|-->&nbsp;<a 
href="javascript:if(confirm('
http://footwear.com.ua/forum
  \n\nThis file 
was not retrieved by Teleport Pro, because it was redirected to an 
invalid location.  You should report this problem to the site\'s 
webmaster.  \n\nDo you want to open it from the 
server?'))window.location='
http://footwear.com.ua/forum
'" 
tppabs="
http://footwear.com.ua/forum
">форум</a>&nbsp;|&nbsp;<a 
href="../ad/index.html" 
tppabs="
http://footwear.com.ua/ad/index.html
">реклама</a>&nbsp;|&nbsp;<a 
href="../webmaster/index.html" 
tppabs="
http://footwear.com.ua/webmaster/index.html
">веб-мастерам</a>&nbsp;|&nbsp;<a 
href="mailto:
sup...@footwear.com.ua
"><a 
href="mailto:
ob...@bigmir.net
">поддержка</a>&nbsp;|</div>
__END__

grazie per la.... pazienza.
Hai inteso bene il mio probblema: i due indirizzi mail sono q.nto voglio
estrapolare.
A me l'ambiente di sviluppo restituisce solo il primo.... (?!), e no il
secondo indirizzo (@ref : 
sup...@footwear.com.ua
). Per inciso, con
PerlBuilder 2 ci ho creato e debuggato quasi 300 righe di codice per
implementare una rete neurale..., non solo un caz.. di matching (!!).
thks
"Emanuele Zeppieri" <emazep@REMOVE_THIStiscali.it> ha scritto nel messaggio
news:LGO_f.78535$A83.1...@twister1.libero.it...


 secondo indirizzo (@ref : 
sup...@footwear.com.ua
).
Allora prova cortesemente a fare questi altri 2 tentativi, e dimmi cosa 
ottieni per *ognuno* di essi:
1.
Stavolta usa questa regex:
@ref = $file =~ m/<.*?a.*?href.*?=.*?"mailto:(.+?@.+?)".*?>/sg;
e fai un tentativo lasciando inalterato tutto il resto.
2.
Dopo aver fatto il tentativo di cui sopra, riprova cambiando soltanto la 
sezione __DATA__, mettendo *esattamente* questo (senza introdurre altri 
newline!):
__DATA__
<a href="mailto:
sup...@footwear.com.ua
">
<a href="mailto:
ob...@bigmir.net
">
__END__
Fammi sapere...