Solo per il gusto di farlo, qui ci sono due modi che non sono stati esplorati:
substr($url, strpos($s, '/', 8), -4)
O:
substr($s, strpos($s, '/', 8), -strlen($s) + strrpos($s, '.'))
basato sull'idea che Gli schemi HTTP http://
e https://
hanno al massimo 8 caratteri, quindi in genere è sufficiente trovare la prima barra dalla 9a posizione in poi. Se l'estensione è sempre .php
, il primo codice funzionerà, altrimenti è richiesto l'altro.
Per una soluzione pura espressione regolare è possibile interrompere la stringa giù come questo:
~^(?:[^:/?#]+:)?(?://[^/?#]*)?([^?#]*)~
^
La porzione percorso sarebbe all'interno del gruppo prima memoria (cioè indice 1), indicato dalla ^
nella linea sotto l'espressione. Rimozione l'estensione può essere fatto utilizzando pathinfo()
:
$parts = pathinfo($matches[1]);
echo $parts['dirname'] . '/' . $parts['filename'];
È inoltre possibile modificare le espressioni a questa:
([^?#]*?)(?:\.[^?#]*)?(?:\?|$)
Questa espressione non è molto ottimale, però, perché ha un po 'indietro il monitoraggio in esso. Alla fine vorrei andare per qualcosa di meno personalizzato:
$parts = pathinfo(parse_url($url, PHP_URL_PATH));
echo $parts['dirname'] . '/' . $parts['filename'];
'(?: Http: [\ /] {2}. +? [.]) [^ \ /] + (. +) [.] +. +' – gaussblurinc