Sólo por el gusto de hacerlo, aquí hay dos maneras que no han sido exploradas:
substr($url, strpos($s, '/', 8), -4)
O:
substr($s, strpos($s, '/', 8), -strlen($s) + strrpos($s, '.'))
basa en la idea de que Los esquemas HTTP http://
y https://
tienen como máximo 8 caracteres, por lo que, por lo general, es suficiente encontrar la primera barra oblicua desde la 9na posición en adelante. Si la extensión es siempre .php
, el primer código funcionará; de lo contrario, se requiere el otro código.
Para una solución de expresión regular puro se puede romper la cadena abajo como este:
~^(?:[^:/?#]+:)?(?://[^/?#]*)?([^?#]*)~
^
La porción camino sería en el interior del grupo primera memoria (es decir, índice 1), indicado por el ^
en la línea debajo la expresion. La eliminación de la extensión se puede hacer usando pathinfo()
:
$parts = pathinfo($matches[1]);
echo $parts['dirname'] . '/' . $parts['filename'];
También puede modificar la expresión a esto:
([^?#]*?)(?:\.[^?#]*)?(?:\?|$)
Esta expresión no es muy óptimo, sin embargo, debido a que tiene algunas volver seguimiento en ella. Al final me quedo con algo menos de encargo:
$parts = pathinfo(parse_url($url, PHP_URL_PATH));
echo $parts['dirname'] . '/' . $parts['filename'];
'(?: Http: [\ /] {2}. +? [.]) [^ \ /] + (. +) [.] +. +' – gaussblurinc