Я пытался понять, что не так с моим regex.
Может ли кто-нибудь дать мне какое-нибудь руководство?
Обратите внимание, что это не всегда будет тег <a> или тег <img>, поэтому я не пошел по маршруту с DOM().
HTML:
<a href = "http://domain.co.uk.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg"><img class = "alignnone size-medium wp-image-4181" src = "http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-300x225.jpg" alt = "dscn8900" width = "300" height = "225" srcset = "http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-300x225.jpg 300w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-768x576.jpg 768w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-1024x768.jpg 1024w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-195x146.jpg 195w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-50x38.jpg 50w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-93x70.jpg 93w" sizes = "(max-width: 300px) 100vw, 300px"></a>
PREG_MATCH_ALL:
preg_match_all('/(((http|https|ftp|ftps)\://)|(www\.))[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\:[0-9]+)?(/\S*)?(\W)/', $HTMLSourceCode, $results, PREG_PATTERN_ORDER);
РЕЗУЛЬТАТ
print_r($results[0][0]);
// http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg">
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:
http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg
@anubhava - У тебя есть пример? - Я использую Regex как строку, поэтому подумал, что будет проще
Причина DownVote?
Замените \S* на [^"]*, удалите (\W). Для одноразового скрипта можно использовать регулярное выражение, для более длительного проекта используйте решение Anubhava.
@TomRegner OMG спасибо! Я пытался найти это решение целую вечность. Я никогда не смогу повесить regex






Вот пример выполнения этой работы DOM:
$html = <<<EOF
<a href = "http://domain.co.uk.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg">
<img class = "alignnone size-medium wp-image-4181" src = "http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-300x225.jpg" alt = "dscn8900" width = "300" height = "225" srcset = "http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-300x225.jpg 300w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-768x576.jpg 768w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-1024x768.jpg 1024w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-195x146.jpg 195w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-50x38.jpg 50w, http://domain.co.uk/wp-content/uploads/2016/06/DSCN8900-93x70.jpg 93w" sizes = "(max-width: 300px) 100vw, 300px"></a>
EOF;
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$nodeList = $xpath->query('//a/@href');
echo $nodeList->item(0)->value . "\n";
Выход:
http://domain.co.uk.co.uk/wp-content/uploads/2016/06/DSCN8900.jpg
Так что мне пришлось бы делать каждый тег отдельно, например - $nodeList = $xpath->query('//a/@href'); и $nodeList = $xpath->query('//img/@href');?
Да для a->href, но если вы хотите захватить image->src, используйте $nodeList = $xpath->query('//img/@src);
Не используйте регулярное выражение для анализа HTML. Вместо этого используйте
DOM.