2013-04-10 2 views
1

Как я могу сопоставить все изображения, начиная с pics.domain.com?соответствует всем фотографиям, начиная с pics.domain.com

, что я пытался

preg_match_all('/<img .*src=(pics.domain.com*)["|\']([^"|\']+)/i', $row['story'], $matches); 
+2

За время Zillion, пожалуйста, используйте HTML-парсер работать на HTML. Используйте DOMDocument для выбора тегов 'img', а затем используйте regex для проверки атрибута' src'. – nhahtdh

+0

@nhahtdh - похоже, что он исходит из БД, но все-таки хороший момент. – adeneo

ответ

4

Использовать DOMDocument и просто перебирать каждую метку <img>; затем использовать parse_url(), чтобы найти хозяина каждого пути изображения:

$doc = new DOMDocument; 
libxml_use_internal_errors(true); 
$doc->loadHTML($row['story']); 
libxml_clear_errors(); 

foreach ($doc->getElementsByTagName('img') as $img) { 
    if (parse_url($img->getAttribute('src'), PHP_URL_HOST) === 'pics.domain.com') { 
     echo "Yay, image found\n"; 
    } 
} 
+2

+1, на самом деле набрал то же самое на основе этого [ответа] (http://stackoverflow.com/questions/2120779/regex-php-isolate-src-attribute-from-img-tag), но вы избили меня к нему! – adeneo

1

Я использовал регулярные выражения в прошлом, он работает за пределами <img> тегов, а также.

'@[\'"](https?://)?([^\.][^\'"]*?)(/)?([^\'"/]*?)\.(jpg|jpeg|png|gif|bmp)[\'"]@' 

Более конкретная версия:

'@[\'"](https?://)?pics\.domain\.com[^\'"]*?\.(jpg|jpeg|png|gif|bmp)[\'"]@' 

На английском языке:

[начать цитаты] (HTTP или HTTPS или ни) pics.domain.com (все, что не цитата) (некоторое расширение изображения) [конец цитаты]

Смежные вопросы