Вот тема:
http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov
Что мне нужно, используя регулярное выражение - это только бит перед последним / (включая последний / тоже) Строка 937IPiztQG может измениться; будет содержать a-z A-Z 0-9 - _
a-z A-Z 0-9 - _
Вот что я попробовал:
$code = strstr($url, '/http:\/\/www\.mysite\.com\/files\/get\/([A-Za-z0-9]+)./');
РЕДАКТИРОВАТЬ: Мне нужно использовать регулярное выражение, потому что я на самом деле не знаю URL. У меня есть строка, как это ...
<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>
Мне нужно, чтобы он прочитал эту строку и обрезал часть URL-адреса в имени файла.
Вам действительно не нужно регулярное выражение здесь. Вот простое решение:
echo basename(dirname('http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov')); // echoes "937IPiztQG"
Также я хотел бы процитировать Джейми Завински:
«Некоторые люди, сталкиваясь с проблемой, думают:« Я знаю, я буду использовать регулярные выражения ». Теперь у них две проблемы. "
Это кажется слишком простым, чтобы использовать регулярные выражения. Используйте что-то похожее на strrpos , чтобы найти последнее вхождение символа '/', а затем используйте substr , чтобы обрезать строку.
Попробуйте это
$ok=preg_match('#mysite\.com/files/get/([^/]*)#i',$url,$m); if($ok) $code=$m[1];
Тогда прочитайте эти страницы
Примечание
Жадность регулярного выражения гарантирует, что это прекрасно работает ^.*/
^.*/
Функция strstr () не использует регулярное выражение ни для одного из своих аргументов это неправильная функция для замены регулярного выражения .
Вы думаете о preg_replace ()?
Но такая функция, как basename () была бы более подходящей.
/http:\/\/www.mysite.com\/files\/get\/([^/]+)\/
Как насчет этого? Который должен захватывать все, что не /, 1 или более раз перед /.