У меня $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=, упорядочить их и получить максимальное числовое значение.






Вам нужно будет экранировать символы ./? (что приводит к \./\?), чтобы получить числа правильно, используйте флаг 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
Номера заказывать не нужно.
Это тот мой друг.
Это регулярное выражение работает со ссылками, имеющими контент, но не сработает, если у ссылки больше атрибутов, чем href. При необходимости я могу это улучшить.
Ах, вы правы, я только что видел, как это проверено на живом сайте. Не могли бы вы улучшить регулярное выражение?
@AymDev У вас была возможность добавить корректировку? Спасибо!
@HenrikPetterson Готово, вы можете добавить другие атрибуты до и после href
@AymDev Придется тебе снова побеспокоить. Похоже, это не работает правильно. В этом примере 194 должно быть наивысшим значением. Вы знаете, почему в этом случае не работает? Обновлено: Итак, когда у него есть атрибуты, это не работает.
@HenrikPetterson Ну, у меня были тяжелые времена с этим, но теперь он работает, просто используйте флаг U, как указано в моем отредактированном ответе
Я одобряю этот ответ.