Регулярные выражения PHP preg_match_all

Привет, я пытаюсь использовать preg_match_all() для извлечения числа, выделенного жирным шрифтом, из URL-адреса изображения...

http://profile.ak.fbcdn.net/hprofile-ak-snc4/174844_39677118233_8277870_t.jpg

Может ли кто-нибудь помочь мне с регулярным выражением, необходимым, поскольку я в тупике.

Я использовал это до сих пор:

preg_match_all("(http://profile.ak.fbcdn.net/hprofile-ak-snc4/.*_t.jpg)siU", $this->html, $matching_data);
return $matching_data[0];
}

Который просто дает мне массив полных ссылок.

Надеюсь, кто-то может помочь, спасибо!!!


person Greg Reed    schedule 28.03.2011    source источник
comment
Если вы пытаетесь использовать preg_match_all, где ваш код?   -  person Aron Rotteveel    schedule 28.03.2011
comment
У вас есть другой пример URL? Все ли имена файлов имеют одинаковое количество знаков подчеркивания?   -  person Steve Mayne    schedule 28.03.2011


Ответы (3)


Это даст вам все вхождения:

$matches = preg_match_all ('!/hprofile-ak-snc4/[0-9]+_([0-9]+)[^/]+?\.jpg!i', $txt);
print_r ($matches);
person vbence    schedule 28.03.2011
comment
К сожалению, у меня есть 5 таких ссылок на странице, и я хотел, чтобы preg_match_all прошел по ним. Я только что попробовал это и получил /174844_39677118233_8277870_t.jpg с preg_match_all. Что усложняет задачу, так это то, что некоторые другие ссылки имеют такой же формат нумерации, но меня интересуют только те ссылки, которые имеют hprofile-ak-snc4/ в качестве префикса... Спасибо за помощь!!! - person Greg Reed; 28.03.2011
comment
@ Грег Рид Я изменил шаблон в соответствии с вашим комментарием. - person vbence; 28.03.2011
comment
Я использовал это - $uri = profile.ak.fbcdn.net/hprofile -ак-snc4/; $matches = preg_match('!/[0-9]+_([0-9]+)[^/]+?\.jpg!i', $uri); эхо ($matches[3]); // будет: 39677118233 - person Greg Reed; 28.03.2011

Номер, который вы выделили жирным шрифтом, должен содержаться в $matches[$n][3]...

preg_match_all("#http://profile\.ak\.fbcdn\.net/(.*?)/([0-9]+)_([0-9]+)_([0-9]+)_t\.jpg#is", $string, $matches);
print_r($matches);
person Dejan Marjanović    schedule 28.03.2011

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

([a-z][a-z0-9+\-.]*:(//[^/?#]+)?)?
([a-z0-9\-._~%!$&'()*+,;=:@/]*)
(?:(?:\d+_)(\d+)(?:_\d+))\3

Я разделил его на несколько строк для удобства чтения. Вы захотите использовать группу захвата 4

Или (просто немного уменьшил его)

(?:[a-z][a-z0-9+\-.]*:(?://[^/?#]+)?)?
([a-z0-9\-._~%!$&'()*+,;=:@/]*)
(?:(?:\d+_)(\d+)(?:_\d+))\1

и используйте группу захвата 2

person Larry G. Wapnitsky    schedule 28.03.2011