Geçerli sayfayı veya dizin adını almak için regex?

8 Cevap php

Ben bir URL'den veya son dizin adını almak için çalışıyorum

Örneğin url ise: http://www.example.com/dir/ i dir dönmek istiyorum ya da geçmiş url ise http://www.example.com/page.php bunu {dönmek istiyorum [(3)] } Ben bölü veya dosya uzantısı istemiyorum dikkat edin.

Ben bu çalıştı:

$regex = "/.*\.(com|gov|org|net|mil|edu)/([a-z_\-]+).*/i";

$name = strtolower(preg_replace($regex,"$2",$url));

PHP bu regex koştu ve hiçbir şey geri döndü. (Ancak ben ActionScript aynı regex test edilmiş ve işe yaradı!)

Yani burada yanlış ne yapıyorum, nasıl ben istiyorum ne alabilirim?

Teşekkürler!

8 Cevap

Siz "/" in orta kaçmayı Tho deneyebilirsiniz. Yani sadece regex kapatır. Yani bu işe yarayabilir:

$regex = "/.*\.(com|gov|org|net|mil|edu)\/([a-z_\-]+).*/i";

Ayrıca regex biraz daha genel yapabilir, ama bu başka bir sorun var.

Aynı zamanda bölü içeriyorsa regex sınırlayıcı olarak / kullanmayın. Bu deneyin:

$regex = "#^.*\.(com|gov|org|net|mil|edu)/([a-z_\-]+).*$#i";

Bu kullanabilirsiniz

array_pop(explode('/', $url));

Sonra herhangi bir dosya uzantısını kaldırmak için basit bir regex uygulamak

Eğer etki kısmından sonra tüm adresi maç istiyorum varsayarsak:

$regex = "%://[^/]+/([^?#]+)%i";

Yukarıdaki formatında bir URL varsayar extension :/ / domainpart / * everythingelse ***.

Ben şahsen düzenli ifadeler kullanarak aşk kadar, (daha iyi bir kelime istediğiniz için) daha 'ham' string fonksiyonları sizin için iyi bir alternatif olabilir. Kullanımları Aşağıdaki pasajı sscanf harflerin ilk grup için URL yolunu kısmını ayrıştırmak için.

$url  = "http://www.example.com/page.php";
$path = parse_url($url, PHP_URL_PATH);
sscanf($path, '/%[a-z]', $part);
// $part = "page";

Bu ifade:

(?<=^[^:]+://[^.]+(?:\.[^.]+)*/)[^/]*(?=\.[^.]+$|/$)

Aşağıdaki sonuçları verir:

http://www.example.com/dir/            dir
http://www.example.com/foo/dir/        dir
http://www.example.com/page.php        page
http://www.example.com/foo/page.php    page

Şimdiden özür dilemek bu geçerli PHP regex değilse - I RegexBuddy kullanarak test.

Kendinize düzenli ifade kaydedin ve PHP'nin diğer fonksiyonları daha ekledi hissettirecek.

$url  = "http://www.example.com/page.php";
$filename = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_FILENAME);

Uyarı: PHP 5.2 ve üstü için.