Захватить параметр в html с наибольшим значением

У меня $html:

$html = '<div>
<a href = "./?pg=99"></a>
<a href = "./?pg=32"></a>
<a href = "./?pg=95"></a>
<a href = "./?pg=1"></a>
//etc
';

Как мне пролистать его и получить максимальное значение pg? Итак, в приведенном выше случае мы получаем:

$result = 99;

Возможный подход - через preg_match_all() и регулярное выражение найти кейсы /?pg=, упорядочить их и получить максимальное числовое значение.

Стоит ли изучать 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 и хотите разрабатывать...
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно будет экранировать символы ./? (что приводит к \./\?), чтобы получить числа правильно, используйте флаг U для последовательных ссылок, а затем используйте max():

//                           number --v              U --v
preg_match_all('/<a.*href = "\./\?pg=(\d+)".*>(?:.*)</a>/U', $html, $matches);

// numbers are our capture group 1 --> $matches[1]
$result = max($matches[1]);

var_dump($result);
// 99

Номера заказывать не нужно.

Я одобряю этот ответ.

Islam Elshobokshy 21.08.2018 11:56

Это тот мой друг.

Henrik Petterson 21.08.2018 12:00

Это регулярное выражение работает со ссылками, имеющими контент, но не сработает, если у ссылки больше атрибутов, чем href. При необходимости я могу это улучшить.

AymDev 21.08.2018 12:01

Ах, вы правы, я только что видел, как это проверено на живом сайте. Не могли бы вы улучшить регулярное выражение?

Henrik Petterson 21.08.2018 12:04

@AymDev У вас была возможность добавить корректировку? Спасибо!

Henrik Petterson 21.08.2018 12:22

@HenrikPetterson Готово, вы можете добавить другие атрибуты до и после href

AymDev 21.08.2018 12:26

@AymDev Придется тебе снова побеспокоить. Похоже, это не работает правильно. В этом примере 194 должно быть наивысшим значением. Вы знаете, почему в этом случае не работает? Обновлено: Итак, когда у него есть атрибуты, это не работает.

Henrik Petterson 21.08.2018 14:15

@HenrikPetterson Ну, у меня были тяжелые времена с этим, но теперь он работает, просто используйте флаг U, как указано в моем отредактированном ответе

AymDev 21.08.2018 15:37

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