Bir URL bir dizin bulmak için regex yazmak nasıl?

6 Cevap php

İşte konu:

http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov

What I need using regex is only the bit before the last / (including that last / too) The 937IPiztQG string may change; it will contain a-z A-Z 0-9 - _

İşte ben denedim ne:

$code = strstr($url, '/http:\/\/www\.mysite\.com\/files\/get\/([A-Za-z0-9]+)./');

EDIT: Ben aslında URL bilmiyorum çünkü regex kullanmak gerekir. Ben böyle dize var ...

<a href="http://www.mysite.com/files/get/1B-MenlPW0/my-file.doc">a song</a>
<a href="http://www.mysite.com/files/get/1ZeR5KEo9x/my-song.mp3">more text</a>
<a href="http://www.mysite.com/files/get/8IySvO5gMD/my-video.avi">oh and here goes some more blah blah</a>

Ben bu dizeyi okudum ve URL'lerin dosya bölümü kesmeye gerek.

6 Cevap

Burada gerçekten bir regexpi gerekmez. Burada basit bir çözümdür:

echo basename(dirname('http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov'));
// echoes "937IPiztQG"

Ayrıca, Jamie Zawinski alıntı İstediklerim:

"Bazı insanlar, bir sorun ile karşılaştıklarında, 'ben normal ifadeler kullanmak olacak, biliyorum.' Düşünüyorum Şimdi iki sorun var. "

Bu regex kullanımı çok basit görünüyor. strrpos '/' karakteri son oluşumu aramak için, ve sonra substr dizesini kırpmak için kullanmak benzer bir şey kullanın.

/http:\/\/www.mysite.com\/files\/get\/([^/]+)\/

Nasıl böyle bir şey? Bir önce / a /, 1 veya daha fazla kez değil bir şey yakalamak hangi.

Işleçleri hırs, bu çalışıyor temin edecek ^.*/

Strstr () işlevi, argümanlarını herhangi biri için normal bir ifade kullanabilirsiniz it's the wrong function for regex replacement. Değil

Siz) (preg_replace düşünüyor musunuz?

Ama gibi bir işlev basename() daha uygun olurdu.

Bu deneyin

$ok=preg_match('#mysite\.com/files/get/([^/]*)#i',$url,$m);
if($ok) $code=$m[1];

Daha sonra bu sayfalara iyi bir okuma vermek

Not

  • önlemek için bir sınırlayıcı olarak "#" kullanımı çok fazla "/" kaçmasını içine hapsolmuş getting
  • the "i" flag making match insensitive (allowing more liberal spellings of the MySite.com domain name)
  • Yakalanan sonuçlarının $ m dizi