Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 84

Регулярка выборки ссылки на картинки с наибольшим размером

19.02.2020, 22:36. Показов 2962. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. В общем есть такой код:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872057.jpg&q;,&q;width&q;:1000,&q;height&q;:592},&q;id&q;:14761872057},{&q;base_action&q;:
 
{&q;url&q;:&q;https://i2.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872190.jpg&q;,&q;width&q;:240,&q;height&q;:236},&q;preview&q;:
 
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872183.jpg&q;,&q;width&q;:140,&q;height&q;:137},&q;small&q;:
 
{&q;url&q;:&q;https://i2.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872211.jpg&q;,&q;width&q;:40,&q;height&q;:39},&q;medium&q;:
 
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872204.jpg&q;,&q;width&q;:80,&q;height&q;:78},&q;large&q;:
 
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872148.jpg&q;,&q;width&q;:960,&q;height&q;:944},&q;id&q;:14761872148},
Я его немного скоротил. Нужно регуляркой как-то выбрать ссылку на картинку, с наибольшими значениями ширины. Это первая и вторая картинка.
Спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.02.2020, 22:36
Ответы с готовыми решениями:

Регулярка для выборки из базы
таблица fields содержит поле options приблизительно со следующими значениями: {"groups": , "choice": , "widget":...

Регулярка для выборки из строки только цифр
<strong class="metrics-data align-vmiddle"> 3,308 </strong> Регулярку пишу : "metrics-data...

Определить диапазон значений выборки (разность между её наибольшим и наименьшим значениями)
Дана выборка случайных чисел: X=(1.1, 2.8, 0.2, 4.6, 1.2, 8.4). Определить диапазон значений выборки, т.е. разность между её наибольшим и...

6
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
19.02.2020, 23:48
Лучший ответ Сообщение было отмечено bibikazgg как решение

Решение

bibikazgg, тут кроме регулярки ещё понадобится некая логика. Т.е., сперва найти все вхождения, а потом уже выбрать необходимые.

Добавлено через 28 минут
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$str = '{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872057.jpg&q;,&q;width&q;:1000,&q;height&q;:592},&q;id&q;:14761872057},{&q;base_action&q;:
 
{&q;url&q;:&q;https://i2.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872190.jpg&q;,&q;width&q;:240,&q;height&q;:236},&q;preview&q;:
 
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872183.jpg&q;,&q;width&q;:140,&q;height&q;:137},&q;small&q;:
 
{&q;url&q;:&q;https://i2.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872211.jpg&q;,&q;width&q;:40,&q;height&q;:39},&q;medium&q;:
 
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872204.jpg&q;,&q;width&q;:80,&q;height&q;:78},&q;large&q;:
 
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872148.jpg&q;,&q;width&q;:960,&q;height&q;:944},&q;id&q;:14761872148},';
 
$total = 2; // Количество ссылок с наибольшим значением width
$result = [];
 
$patt = '~(https?://(?:[^/]+/)+[^.]+\.\pL{3,4})\D+width\D+(\d+)\D+height\D+(\d+)\K~';
preg_replace_callback(
    $patt,
    function($m)use(&$result){
        $result[] = array_filter($m);
    },
    $str
);
 
usort($result, function($a, $b){ return $b[2] <=> $a[2]; });
$result = array_map(function($a){
    return $a[1];
}, array_slice($result, 0, $total));
 
var_dump($result);
/*
array (size=2)
  0 => string 'https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872057.jpg'
  1 => string 'https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872148.jpg'
*/
2
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
20.02.2020, 10:14
Лучший ответ Сообщение было отмечено bibikazgg как решение

Решение

Цитата Сообщение от Строитель Посмотреть сообщение
$patt = '~(https?://(?:[^/]+/)+[^.]+\.\pL{3,4})\D+width\D+(\d+)\D+height\D+ (\d+)\K~';
preg_replace_callback(
    $patt,
    function($m)use(&$result){
        $result[] = array_filter($m);
    },
    $str
);
красиво
внесу свои пять копеек. то же но на java script и без регулярок (.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<script>
source = [
        '{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872057.jpg&q;,&q;width&q;:1000,&q;height&q;:592},&q;id&q;:14761872057},{&q;base_action&q;:',
        '{&q;url&q;:&q;https://i2.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872190.jpg&q;,&q;width&q;:240,&q;height&q;:236},&q;preview&q;:',
        '{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872183.jpg&q;,&q;width&q;:140,&q;height&q;:137},&q;small&q;:',
        '{&q;url&q;:&q;https://i2.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872211.jpg&q;,&q;width&q;:40,&q;height&q;:39},&q;medium&q;:',
        '{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872204.jpg&q;,&q;width&q;:80,&q;height&q;:78},&q;large&q;:',
        '{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872148.jpg&q;,&q;width&q;:960,&q;height&q;:944},&q;id&q;:14761872148},'    
    ];
    length = 2; // число элемнтов для вывода 
    parsed = []; // массив найденных элементов
    for (i = 0; i < length; i++) { 
        parsed[i] = ['', 0, 0];
    }
    function Picture(str) { // извлекает из строки url, width, height
        // возвращает массив в формате [url, width, height]
        prop = [];
        part = str.split('&q;');
        prop[0] = part[3];// url
        prop[1] = parseInt(part[6].substr(1)); // width
        prop[2] = parseInt(part[8].substr(1)); // height
        return prop;
    }
    for (i = 0; i < source.length; i++) {
        img = Picture(source[i]);
        for (j = 0; j < parsed.length; j++) {
            if (img[1] > parsed[j][1]) {
                parsed.splice(j, 0, img);
                parsed.pop(); // удаляем лишний элемент
                break;
            }
        }
    }
    img = null;
    // вывод данных
    for (i = 1; i <= parsed.length; i++) {
        document.writeln('<p>' + i + 
            ') url=' + parsed[i - 1][0] +
            '; width=' + parsed[i - 1][1] +
            '; height=' + parsed[i - 1][2] + '</p>');
    }
</script>
1
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
20.02.2020, 10:47
Цитата Сообщение от vinikon Посмотреть сообщение
красиво
Спс
0
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 84
27.02.2020, 20:13  [ТС]
Строитель, спасибо за развернутый ответ. Но у меня почему то код исполняется с ошибкой

Parse error: syntax error, unexpected '>' in D:\WebServers2\OSPanel\domains\localhost \ddom\aa.php on line 37

Проблема вот в этом месте, как я понял

PHP
1
usort($result, function($a, $b){ return $b[2] <=> $a[2]; });
И весь код, может я где-то накосячил. Содержимое получаю с помощью библиотеки Didom

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
include_once('vendor/autoload.php');
use DiDom\Document;
 
$document = new Document('https://rozetka.com.ua/110032048/p110032048/', true);
 
$posts = $document->find('.product__title');
$posts2 = $document->find('#rz-client-state');
$posts3 = $document->find('*[i2.rozetka.ua]');
 
// foreach($posts as $post) {
//     echo $post->text(), "\n";
// }
 
// foreach($posts2 as $post2) {
//     echo $post2->text(), "\n";
// }
 
foreach($posts2 as $post2) { };
 
 
 
$total = 2; // Количество ссылок с наибольшим значением width
$result = [];
 
$patt = '~(https?://(?:[^/]+/)+[^.]+\.\pL{3,4})\D+width\D+(\d+)\D+height\D+(\d+)\K~';
preg_replace_callback(
    $patt,
    function($m)use(&$result){
        $result[] = array_filter($m);
    },
    $post2
);
 
usort($result, function($a, $b){ return $b[2] <=> $a[2]; });
$result = array_map(function($a){
    return $a[1];
}, array_slice($result, 0, $total));
 
var_dump($result);
 
?>
Добавлено через 44 секунды
Строитель, спасибо за развернутый ответ. Но у меня почему то код исполняется с ошибкой

Parse error: syntax error, unexpected '>' in D:\WebServers2\OSPanel\domains\localhost \ddom\aa.php on line 37

Проблема вот в этом месте, как я понял

PHP
1
usort($result, function($a, $b){ return $b[2] <=> $a[2]; });
И весь код, может я где-то накосячил. Содержимое получаю с помощью библиотеки Didom

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
include_once('vendor/autoload.php');
use DiDom\Document;
 
$document = new Document('https://rozetka.com.ua/110032048/p110032048/', true);
 
$posts = $document->find('.product__title');
$posts2 = $document->find('#rz-client-state');
$posts3 = $document->find('*[i2.rozetka.ua]');
 
// foreach($posts as $post) {
//     echo $post->text(), "\n";
// }
 
// foreach($posts2 as $post2) {
//     echo $post2->text(), "\n";
// }
 
foreach($posts2 as $post2) { };
 
 
 
$total = 2; // Количество ссылок с наибольшим значением width
$result = [];
 
$patt = '~(https?://(?:[^/]+/)+[^.]+\.\pL{3,4})\D+width\D+(\d+)\D+height\D+(\d+)\K~';
preg_replace_callback(
    $patt,
    function($m)use(&$result){
        $result[] = array_filter($m);
    },
    $post2
);
 
usort($result, function($a, $b){ return $b[2] <=> $a[2]; });
$result = array_map(function($a){
    return $a[1];
}, array_slice($result, 0, $total));
 
var_dump($result);
 
?>
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
28.02.2020, 00:00
Лучший ответ Сообщение было отмечено bibikazgg как решение

Решение

bibikazgg, оператор <=> доступен с PHP-7 и выше. Если вы видите такую ошибку, то нужно обновить (переключить) версию php.

Если же нет возможности поднять версию php, то можно воспользоваться альтернативным вариантом для оператора spacesheep:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$str = '{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872057.jpg&q;,&q;width&q;:1000,&q;height&q;:592},&q;id&q;:14761872057},{&q;base_action&q;:
 
{&q;url&q;:&q;https://i2.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872190.jpg&q;,&q;width&q;:240,&q;height&q;:236},&q;preview&q;:
 
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872183.jpg&q;,&q;width&q;:140,&q;height&q;:137},&q;small&q;:
 
{&q;url&q;:&q;https://i2.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872211.jpg&q;,&q;width&q;:40,&q;height&q;:39},&q;medium&q;:
 
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872204.jpg&q;,&q;width&q;:80,&q;height&q;:78},&q;large&q;:
 
{&q;url&q;:&q;https://i1.rozetka.ua/goods/14761872/fitlogic_tx31_images_14761872148.jpg&q;,&q;width&q;:960,&q;height&q;:944},&q;id&q;:14761872148},';
 
$total = 2; // Количество ссылок с наибольшим значением width
$result = [];
 
$patt = '~(https?://(?:[^/]+/)+[^.]+\.\pL{3,4})\D+width\D+(\d+)\D+height\D+(\d+)\K~';
preg_replace_callback(
    $patt,
    function($m)use(&$result){
        $result[] = array_filter($m);
    },
    $str
);
 
usort($result, function($a, $b){ return $b[2] - $a[2]; });
$result = array_map(function($a){
    return $a[1];
}, array_slice($result, 0, $total));
 
var_dump($result);
1
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 84
28.02.2020, 12:41  [ТС]
Спасибо Строитель, за подсказку
Попробую переключиться на 7.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.02.2020, 12:41
Помогаю со студенческими работами здесь

Регулярка для https ссылки
Всем привет помогите пожалуйста составить pattern для такой ссылки: https://www.site.ru/Рандомный_текст/

Регулярка для ссылки в img
Функция catch_that_image(), ловит первое изображение из поста и вытаскивает его в превью, но проблема в том, что если рядом с изображением...

Регулярка, извлекающая все ссылки из текста
Всем доброго! Знатоки пожалуйста помогите, решить задачку. Не сильно силен в регулярках, по этому не понимаю, как составить паттерн. ...

Регулярка для замены последней части ссылки
Добрый день. Подскажите, пожалуйста, регулярку для замены последней части в строке такого вида: ...

В двоичной матрице размером 5X10 определить номер строки с наибольшим количеством нулей
В двоичной матрице размером 5X10 определить номер строки с наибольшим количеством нулей


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru