preg_match_all регулярное выражение не работает, когда есть пробелы

Я пытаюсь получить URL-адреса изображений из исходного кода HTML, используя следующее регулярное выражение, но это не удается, когда URL-адрес изображения содержит пробелы. Например, этот URL:

<img src="http://a57.foxnews.com/global.fncstatic.com/static/managed/img/Entertainment/876/493/kazantsev pink bikini reuters.jpg?ve=1&amp;tl=1" alt="kazantsev pink bikini reuters.jpg" itemprop="image">

$image_regex_src_url = '/<img[^>]*'.'src=[\"|\'](.*)[\"|\']/Ui';
preg_match_all($image_regex_src_url, $string, $out, PREG_PATTERN_ORDER);

Это возвращает мне следующее.
http://a57.foxnews.com/global.fncstatic.com/static/managed/img/Entertainment/876/493/kazantsev

Есть ли способ сопоставить любой символ, включая пробелы? Или это то, что я должен установить в конфигурации php?

0

Решение

У вас есть несколько проблем с вашим регулярным выражением.

Сначала вы пытаетесь использовать оператор конкатенации ('.') объединить обе части вашего выражения вместе ( это не обязательно ). Во-вторых, вам не нужно использовать оператор чередования | внутри ваших классов персонажей.

Точка . будет соответствовать любому символу кроме последовательности новой строки. Вполне возможно, что эти теги могут включать разрывы строк, поскольку они расположены в исходном коде HTML. Вы могли бы использовать s модификатор (dotall), который заставляет точку соответствовать любому символу, включая разрывы строк, или использовать отрицательный символьный класс, означающий соответствие любому символу Кроме.

С использованием s (dotall) модификатор:

$image_regex_src_url = '/<img[^>]*src=(["\'])(.*?)\1/si';

Использование отрицательного класса символов [^ ]

$image_regex_src_url = '/<img[^>]*src=(["\'])([^"\']*)\1/i';

Хотя гораздо проще использовать такой парсер, как DOM чтобы захватить результаты.

$doc = new DOMDocument;
@$doc->loadHTML($html); // load the HTML

foreach($doc->getElementsByTagName('img') as $node) {
$urls[] = $node->getAttribute('src');
}

print_r($urls);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]