Избавьтесь от конечной строки с помощью регулярного выражения [PHP]

Я пытался понять, что не так с моим 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

Не используйте регулярное выражение для анализа HTML. Вместо этого используйте DOM.

anubhava 13.04.2018 11:52

@anubhava - У тебя есть пример? - Я использую Regex как строку, поэтому подумал, что будет проще

YaBCK 13.04.2018 11:53

Причина DownVote?

YaBCK 13.04.2018 12:03

Замените \S* на [^"]*, удалите (\W). Для одноразового скрипта можно использовать регулярное выражение, для более длительного проекта используйте решение Anubhava.

Tom Regner 13.04.2018 12:05

@TomRegner OMG спасибо! Я пытался найти это решение целую вечность. Я никогда не смогу повесить regex

YaBCK 13.04.2018 12:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
30
1

Ответы 1

Вот пример выполнения этой работы 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');?

YaBCK 13.04.2018 12:02

Да для a->href, но если вы хотите захватить image->src, используйте $nodeList = $xpath->query('//img/@src);

anubhava 13.04.2018 12:12

Другие вопросы по теме