Chỉ cần cho những niềm vui của nó, đây là hai cách mà chưa được khám phá:
substr($url, strpos($s, '/', 8), -4)
Hoặc:
substr($s, strpos($s, '/', 8), -strlen($s) + strrpos($s, '.'))
Dựa trên ý tưởng rằng Lược đồ HTTP http://
và https://
có tối đa 8 ký tự, vì vậy thường nó đủ để tìm dấu gạch chéo đầu tiên từ vị trí thứ 9 trở đi. Nếu tiện ích mở rộng luôn là .php
mã đầu tiên sẽ hoạt động, nếu không, mã còn lại là bắt buộc.
Đối với một giải pháp biểu thức chính quy tinh khiết bạn có thể phá vỡ các chuỗi xuống như thế này:
~^(?:[^:/?#]+:)?(?://[^/?#]*)?([^?#]*)~
^
Các phần đường dẫn sẽ là bên trong nhóm bộ nhớ đầu tiên (tức là chỉ số 1), chỉ định bởi các ^
trong dòng bên dưới cách diễn đạt. Loại bỏ phần mở rộng có thể được thực hiện bằng pathinfo()
:
$parts = pathinfo($matches[1]);
echo $parts['dirname'] . '/' . $parts['filename'];
Bạn cũng có thể tinh chỉnh các biểu hiện sau:
([^?#]*?)(?:\.[^?#]*)?(?:\?|$)
biểu hiện này không phải là rất tối ưu mặc dù, bởi vì nó có một số trở lại theo dõi trong đó. Cuối cùng tôi sẽ đi kiếm cái gì ít tùy chỉnh:
$parts = pathinfo(parse_url($url, PHP_URL_PATH));
echo $parts['dirname'] . '/' . $parts['filename'];
'(?: Http: [\ /] {2}. +? [.]) [^ \ /] + (. +) [.] +. +' – gaussblurinc