Как написать регулярное выражение, чтобы найти один каталог в URL? - PullRequest
0 голосов
/ 04 октября 2009

Вот тема:

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

Что мне нужно, используя регулярное выражение - это только бит перед последним / (включая последний / тоже) Строка 937IPiztQG может измениться; будет содержать 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-адреса в имени файла.

Ответы [ 6 ]

4 голосов
/ 04 октября 2009

Вам действительно не нужно регулярное выражение здесь. Вот простое решение:

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

Также я хотел бы процитировать Джейми Завински:

«Некоторые люди, сталкиваясь с проблемой, думают:« Я знаю, я буду использовать регулярные выражения ». Теперь у них две проблемы. "

2 голосов
/ 04 октября 2009

Это кажется слишком простым, чтобы использовать регулярные выражения. Используйте что-то похожее на strrpos , чтобы найти последнее вхождение символа '/', а затем используйте substr , чтобы обрезать строку.

0 голосов
/ 04 октября 2009

Попробуйте это

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

Тогда прочитайте эти страницы

Примечание

  • использование "#" в качестве разделителя, чтобы избежать попадания в ловушку слишком большого числа "/"
  • флаг "i" делает нечувствительным к совпадению (допускается более либеральное написание имени домена MySite.com)
  • массив захваченных результатов $ m
0 голосов
/ 04 октября 2009

Жадность регулярного выражения гарантирует, что это прекрасно работает ^.*/

0 голосов
/ 04 октября 2009

Функция strstr () не использует регулярное выражение ни для одного из своих аргументов это неправильная функция для замены регулярного выражения .

Вы думаете о preg_replace ()?

Но такая функция, как basename () была бы более подходящей.

0 голосов
/ 04 октября 2009
/http:\/\/www.mysite.com\/files\/get\/([^/]+)\/ 

Как насчет этого? Который должен захватывать все, что не /, 1 или более раз перед /.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...