Newsgroup: it.comp.www.php
Titolo: Estarre sub string

Data una stringa come la seguente:
 Jun 13 15:05:48 
213-156-52-112.fastres.net
 kernel: RRR-00002-00001:IN=tun0 
OUT=vlan1 SRC=192.168.182.3 DST=213.205.40.169 LEN=48 TOS=0x00 PREC=0x00 
TTL=127 ID=7109 DF PROTO=TCP SPT=2278 DPT=80 WINDOW=16384 RES=0x00 SYN 
URGP=0
dovendo estrarre gli indirizzi IP (variabili) del campo "SRC="  e "DST=".
Ho provato con split, expand ed un altra funzione di cui mi sfugge il nome 
(appunti in ufficio ò) a cui come argometi passo Pattern, Stringa e array ma 
i risultati sono stati confusi.
Un 'anima pia riuscirebbe a passarmi un pattern per ottenere i due campi.
Grazie Carlo 

 riuscirebbe a passarmi un pattern per ottenere i due campi.
$pattern = '#SRC=([^\s]*)#si';
$pattern = '#DST=([^\s]*)#si';
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

Filippo, grazie per la risposta, ma ho provato e non funziona.
Queste sono le poche linee php che utilizzo, ho fatto quache strambata?
<?php
$stringa_iniz= "kernel: RRR-NI00002-RN00002:IN=tun0 OUT=vlan1 
SRC=192.168.12.2 DST=213.140.4.103 LEN=52 TOS=0x00 PREC=0x00 TTL=127 
ID=57553 DF PROTO=TCP SPT=3564 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0";
print($stringa_iniz);
$parti = array();
$pattern = '#SRC=([^\s]*)#si';
ereg($pattern, $stringa_iniz, $parti);
print_r($parti);
?>
Grazie ancora,
Carlo

 Filippo, grazie per la risposta, ma ho provato e non funziona.
A me funziona perfettamente.
<pre>
<?php
$content = "kernel: RRR-NI00002-RN00002:IN=tun0 OUT=vlan1
SRC=192.168.12.2 DST=213.140.4.103 LEN=52 TOS=0x00 PREC=0x00 TTL=127
ID=57553 DF PROTO=TCP SPT=3564 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0";
$pattern = '#SRC=([^\s]*)#si';
if (preg_match($pattern, $content, $matches)) {
	echo($matches[1]);
}
print("\r\n");
$pattern = '#DST=([^\s]*)#si';
if (preg_match($pattern, $content, $matches)) {
	echo($matches[1]);
}
?>
</pre>
Se copi questo codice, fa attenzione a non introdurre dei caratteri di
ritorno a capo non necessari.


 $pattern = '#SRC=([^\s]*)#si';
Sei sicuro del cancelletto? Mi pare che sia un commento nella regexp. Il 
carattere corretto dovrebbe essere / (la barra dritta) per delimitare la 
regexp e dividerla dai modificatori.
Se invece era un "RTFM" mascherato, mi scuso. :)
Bye.

 ha scritto nel messaggio 
news:6f67bmF...@mid.individual.net...


regexp e dividerla dai modificatori.
Credo che il primo carattere sia sempre un delimitatore. Cioe' - e' il
contrario: qualunque sia il primo carattere, si presume che quello sia
il delimitatore.
Leonardo
-- 
IN NO EVENT SHALL MICROSOFT [] BE LIABLE FOR [] FAILURE TO MEET ANY DUTY
INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR NEGLIGENCE [] EVEN IN
THE EVENT OF [] BREACH OF CONTRACT OR BREACH OF WARRANTY OF MICROSOFT...
                              -- EULA di Windows Media VCM 9, articolo 8

 delimitare la regexp e dividerla dai modificatori.
Come da manuale "The expression should be enclosed in the delimiters, a
forward slash (/), for example. Any character can be used for delimiter
as long as it's not alphanumeric or backslash (\). If the delimiter
character has to be used in the expression itself, it needs to be
escaped by backslash."
Personalmente utilizzo il # perche' la maggior parte delle espressioni
regolari che sviluppo in PHP contengono / (es. URL e tag HTML) e
ritengo che doverne fare l'escaping renderebbe l'espressione molto piu'
difficile da leggere.


 Personalmente utilizzo il # perche' la maggior parte delle espressioni
E mi sa che lo usero` anche io per lo stesso motivo.
Grazie.
Bye.


Il codice funziona a meraviglia l'ho anche modificato ed ottengo il NASID, 
Il nome del router e i due indirizzi IP, ora devo interfaccirmi al server 
radius ed ho appena iniziato, ma queste sono cose che macino un po' meglio.
Avrei un'altra domanda:
in uno script php che deve eseguire diverse operazioni, diverse ma 
concatenate č meglio scriverle cosě:
primo caso
<?php
fai_questo; (insieme di istruzioni che eseguono un task)
poi_questo;
non_credere_di_aver_finito;
?>
oppure e meglio:
<?php
fai_questo; (insieme di istruzioni che eseguono un task)
?>
<?php
poi_questo;
?>
<?php
non_credere_di_aver_finito;
?>
Vorrei fare le cose per bene.
Grazie carlo