Newsgroup: it.comp.www.php
Titolo: Aiiuto con una regexp.

Questo è il mio codice:
 
$pattern = "/\/([^\/]+)$/";
$urMod = preg_replace($pattern, "", $url);
Quello che vorrei è che mi restituisse un Url depurato da tutto quanto 
esista dopo l'ultimo /.
 
Esempio:
1. data la stringa: 
http://www.google.it/index.php
 
2 .oppure 
http://www.google.it/
 
 
il risultato dovrebbe essere: 
http://www.google.it/
 
 
invece il mio codice restituisce due risultati diverse e cioè:
nel primo caso -> 
http://www.google.it
 
mentre nel secondo caso -> 
http://www.google.it/
 
 
Come dovrei modificare la regexp?
 
Grazie in anticipo 
 
 


Così dovrebbe andare
 
 
$pattern = "/^[a-z]+:\/\/[a-z.]+\/?/";
 
$url="
http://www.google.com/
";
preg_match_all($pattern,$url,$res);
print_r($res);
$url="
http://www.google.com/index/something/other.php
";
preg_match_all($pattern,$url,$res);
print_r($res);
 
~~~~~~~~~~~~~~~~~
 
Array
(
     [0] => Array
         (
             [0] => 
http://www.google.com/
 
         )
 
)
Array
(
     [0] => Array
         (
             [0] => 
http://www.google.com/
 
         )
 
)
 
 
-- 
I fatti mi cosano


 
Nel caso di url con sottodomini con un numero nel nome fallisce:
 
http://www.uno2.altervista.org/index.php?uno=0&iparoun=1
 
 
restituisce
 
http://www.uno
 

 esista dopo l'ultimo /.
 
Fermo restando che le regexp sono uno strumento favoloso, perche' non 
usare la funzione parse_url che e' fatta proprio per quello?
 
Ciao.
 
-- 
Pubblicita' regresso: 
http://www.ferrero.org
 
** Per scrivermi in mail, sostituire nutella con ferrero...
** To contact me by email, change nutella to ferrero...
 

esista dopo l'ultimo /.
 
Dando per scontato che tu abbia un URL valido, stai chiedendo
 
	"#http://[^/]+/#"
 
usando # come separatore per non dover fare escaping dei /. Il problema
e' che tu lo vuoi fare al contrario, con preg_replace anziche' match, e
far fuori quello che NON matcha. IMHO non e' sano, ma YMMV.
 
	preg_replace("#(http://[^/]+/).*#", "\\1", $url);
 
oppure
	preg_replace("#(http://[^/]+))/*.*#', "\\1", $url);
 
Questa è una leggera variazione per gestire il caso in cui in input non
ci sia il / finale, che tu vuoi comunque (AFAIS) e quindi puoi metterci
da te:
 
<?php
	$regexp	= "#(http://[^/]+)/.*#";
        $tests  = array(
                '
http://www.google.it
',
                '
http://www.google.it/
',
                '
http://www.google.it/index
',
                '
http://www.google.it/index/path
',
                '
http://www.google.it/index/path.ext
',
        );
        foreach($tests as $test)
        {
                print "$test --> ";
		print preg_replace($regexp, "\\1", $test);
		print "\n";
        }
?>
 
http://www.google.it
 --> 
http://www.google.it
 
http://www.google.it/
 --> 
http://www.google.it
 
http://www.google.it/index
 --> 
http://www.google.it
 
http://www.google.it/index/path
 --> 
http://www.google.it
 
http://www.google.it/index/path.ext
 --> 
http://www.google.it
 
 
Leonardo
 
-- 
Tell us whether you spy, in the light of the morn,
what saluted was fiercely at the fall of the past day:
whose pips and whose bands in the very heart of the fray
bravely floated from the bulwarks to which we were sworn?

 far fuori quello che NON matcha. IMHO non e' sano...
 
Non pensavo a questa "insanità" me se lo sconsigli accetto il "consiglio" e 
modifico matchando.
 
Grazie 
 
 

la funzione parse_url che e' fatta proprio per quello?
 
Questa non la conoscevo, vedo come posso utilizzarla.
Grazie 
 
 


DOH!
e non è la prima volta che ci casco :D
 
Allora
$pattern = "/^[a-z]+:\/\/[a-zA-Z0-9.]+\/?/";
 
M
-- 
I cosi mi fattano