Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
1

Все совпадения в один массив

22.07.2019, 12:30. Показов 1755. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую, комрады! Сразу говорю, с регулярками скорее знаком, чем дружу, там что не пинайте.
Дело в следующем:
есть шаблон, из которой надо вынуть совпадения.
HTML5
1
2
3
4
5
6
7
<div class="vacancy-block">
    <div class="date">21.07.2019</div>
    <div class="vacancy"><a href="/c14782-5726295.html" title="Парикмахер-универсал">Парикмахер-универсал<br><strong>ART+</strong><br></a></div>
    <div class="city">Москва</div>
    <div class="salary">50000 руб.</div>
    <div class="clr"></div>
</div>
Сейчас делаю примерно следующее, но понимаю, что как-то не правильно это все.
PHP
1
preg_match_all('~<div class="date">([^<]+)|[^<a]+href="([^\s]+)" title="([^<]+)".+<strong>([^<]*)</strong>|<div class="city">([^<]+)~ui', $vac, $m, PREG_SET_ORDER);
и получается так, что вполне закономерно:
Код
   [114] => Array
        (
            [0] => 
21.07.2019
            [1] => 21.07.2019
        )

    [115] => Array
        (
            [0] =>  href="/c14782-5726295.html" title="Парикмахер-универсал">Парикмахер-универсал
ART+
            [1] => 
            [2] => /c14782-5726295.html
            [3] => Парикмахер-универсал
            [4] => ART+
        )

    [116] => Array
        (
            [0] => 
Москва
            [1] => 
            [2] => 
            [3] => 
            [4] => 
            [5] => Москва
        )
Собственно, вопрос: как все совпадения поместить в единый массив?
Заранее благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2019, 12:30
Ответы с готовыми решениями:

Найти все совпадения
Есть строка, в которой помимо прочего есть такое: ...

Все совпадения preg_match_all
Здравствуйте. Написал регулярное выражение для поиска инфы на станице, ищет нормально, но...

Получить все совпадения с карманами
Добрый вечер, есть строка $number = '100||||736||||150----031' Необходимо получить массив Array...

Заменить все совпадения при условии что
Допустим есть текст $text = &quot;{if_admin} {if_admin}&quot;; Если $_SESSION == &quot;admin&quot; то заменяем...

5
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
22.07.2019, 13:16 2
Лучший ответ Сообщение было отмечено Пифагор как решение

Решение

Пифагор, если я правильно понял:
Кликните здесь для просмотра всего текста
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
$str = '<div class="vacancy-block">
    <div class="date">21.07.2019</div>
    <div class="vacancy"><a href="/c14782-5726295.html" title="Парикмахер-универсал">Парикмахер-универсал<br><strong>ART+</strong><br></a></div>
    <div class="city">Москва</div>
    <div class="salary">50000 руб.</div>
    <div class="clr"></div>
</div>';
 
$match = [];
$patt = '~
    class="(?:date|city)">\K[^<]+ |
    (?:href|title)="\K[^"]+ |
    <strong>\K[^<]+
~x';
 
if (preg_match_all($patt, $str, $match)) {
    $match = $match[0];
}
 
var_dump($match);
/*
array (size=5)
  0 => string '21.07.2019' (length=10)
  1 => string '/c14782-5726295.html' (length=20)
  2 => string 'Парикмахер-универсал' (length=39)
  3 => string 'ART+' (length=4)
  4 => string 'Москва' (length=12)
*/
1
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
22.07.2019, 13:42  [ТС] 3
Строитель, благодарю. Ну, работать работает, но, мягко говоря, не совсем так, как надо. Короче, парсит почти все. И каждое совпадение - это отдельный элемент массива.
Мне нужно парсить с сайта блоки(шаблон выше), и сейчас полученные данные располагаются в трех массивах, как я и показывал. Конечно, это не критично, я просто потом по 3 собраю и объединяю в один, но хотелось бы, чтобы данные СРАЗУ были в ОДНОМ массиве.

Вот так данные выглядят в итоге:
Кликните здесь для просмотра всего текста
Код
[0] => Array
        (
            [0] => 
22.07.2019
            [1] => 22.07.2019
            [2] =>  href="/c14770-4515186.html" title="Требуется: Медицинская сестра в частный пансионат.">Требуется: Медицинская сестра в частный пансионат.
КА Империя
            [3] => /c14770-4515186.html
            [4] => Требуется: Медицинская сестра в частный пансионат.
            [5] => КА Империя
            [6] => 
Москва
            [7] => Москва
        )

    [1] => Array
        (
            [0] => 
22.07.2019
            [1] => 22.07.2019
            [2] =>  href="/c14761-4150276.html" title="Требуется: Няня, метро Молодёжная.">Требуется: Няня, метро Молодёжная.
КА Империя
            [3] => /c14761-4150276.html
            [4] => Требуется: Няня, метро Молодёжная.
            [5] => КА Империя
            [6] => 
Москва
            [7] => Москва
        )

    [2] => Array
        (
            [0] => 
22.07.2019
            [1] => 22.07.2019
            [2] =>  href="/c14761-4150275.html" title="Требуется: Помощники по хозяйству м+ж , пос. Юдино ( Одинцовский район).">Требуется: Помощники по хозяйству м+ж , пос. Юдино ( Одинцовский район).
КА Империя
            [3] => /c14761-4150275.html
            [4] => Требуется: Помощники по хозяйству м+ж , пос. Юдино ( Одинцовский район).
            [5] => КА Империя
            [6] => 
Москва
            [7] => Москва
        )

    [3] => Array
        (
            [0] => 
22.07.2019
            [1] => 22.07.2019
            [2] =>  href="/c14761-4150274.html" title="Требуется: Сиделка, метро Проспект Вернадского.">Требуется: Сиделка, метро Проспект Вернадского.
КА Империя
            [3] => /c14761-4150274.html
            [4] => Требуется: Сиделка, метро Проспект Вернадского.
            [5] => КА Империя
            [6] => 
Москва
            [7] => Москва
        )
0
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
22.07.2019, 13:45 4
Пифагор, а есть пример конкретной строки, которую нужно распарсить? А то ведь для той, что в первом посту, всё парсится корректно, в один массив.
0
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
22.07.2019, 13:51  [ТС] 5
Так вот это и есть "пример" . Он из 40 блоков на странице. Строитель, кину в личку страницу, чтобы в теме не "мусорить".
0
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
22.07.2019, 13:53 6
Пифагор, ок )
0
22.07.2019, 13:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2019, 13:53
Помогаю со студенческими работами здесь

Вырезать из строки совпадения с решетками и записать их в массив
Доброго времени суток. Есть строка вида: #room#-комн. квартира, #area# кв.м., #floor# этаж ...

Как собрать все совпадения в массив
Здравствуйте. Проще всего наверно объяснить мой вопрос на парсере... то есть... пусть надо...

Выделить все дробные части чисел в один массив, все целые - в другой массив
в массиве вещественных чисел выделить все дробные части чисел в отдельный массив все дробные в...

Скопировать из матрицы в один одномерный массив все положительные элементы, а в другой – все отрицательные
Заполнить с клавиатуры двумерный массив на 20 элементов. Скопировать из него в один одномерный...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru