• Как распарсить данные триггером перед вставкой mysql?

    @rotarepmipoleved
    SUBSTRING_INDEX(string, delimiter, number) (https://www.w3schools.com/sql/func_mysql_substring...

    SELECT
    	SUBSTRING_INDEX("07-Mar-2020 18:11:34.456 queries: info: client 55.44.33.22#49230 (111.222.333.444.in-addr.arpa): view All_View: query: 111.111.111.111.in-addr.arpa IN PTR + (22.22.22.22)", " queries:", 1) as `date`,
    	SUBSTRING_INDEX(
    		SUBSTRING_INDEX("07-Mar-2020 18:11:34.456 queries: info: client 55.44.33.22#49230 (111.222.333.444.in-addr.arpa): view All_View: query: 111.111.111.111.in-addr.arpa IN PTR + (22.22.22.22)", "#", 1),
    		" ",
    		-1
    	) as `client`,
    	SUBSTRING_INDEX(
    		SUBSTRING_INDEX(
    			"07-Mar-2020 18:11:34.456 queries: info: client 55.44.33.22#49230 (111.222.333.444.in-addr.arpa): view All_View: query: 111.111.111.111.in-addr.arpa IN PTR + (22.22.22.22)",
    			"query: ",
    			-1
    		),
    		" IN PTR",
    		1
    	) as `request`


    Результат:
    5e63789219175851589352.png
    Ответ написан
    9 комментариев
  • Как парсить названия ссылок на php?

    @rotarepmipoleved
    $pattern — https://regex101.com/r/Qsocuh/1

    preg_match_all($pattern, $html, $match)
    Далее работаем с $match
    Ответ написан
    Комментировать
  • Как проверить объект на вложенность?

    @rotarepmipoleved
    let user = {
      firstUser: {
        age: 22
      }
    }
    
    function rec(user) {
    
      for (let key in user) {
        if (typeof (user[key]) == "object") {
          console.log(key)
          rec(user[key]);
        } else {
            console.log(key.toUpperCase())
        }
      }
    }
    
    rec(user)

    Результат:
    firstUser
    AGE

    По вложенности полагаю примерно так можно сделать:
    let user = {
      firstUser: {
        age: 22
      },
      testLevels: {
        is2level: {
            a2level: {
                a3level: 100
            }
        }
      }
    }
    
    let level = 1;
    function rec(user) {
      switch(level) {
          case 3:
            console.log('Привет, это 3 уровень вложенности');
          break;
          case 10:
            console.log('Привет, 10 уровень');
          break;
      }
      
      for (let key in user) {
        if (typeof (user[key]) == "object") {
          ++level;
          console.log(key)
          rec(user[key]);
        } else {
            console.log(key.toUpperCase())
            level = 0
        }
      }
    }
    
    rec(user)


    P.S. Если функция планируется использоваться несколько раз - level сбрасывать.
    P.S.S. Не самая лучшая реализация, можно улучшить.
    Ответ написан
    Комментировать
  • Почему при отслеживании сообщения VK он возвращается 2 раза?

    @rotarepmipoleved
    DOMSubtreeModified устарело в пользу MutationObserver.


    Если не хотите переходить на MutationObserver пробуйте экспериментально узнать от чего зависит количество вызовов.

    Для экспериментов можно предлагаю попробовать разные действия с отслеживаемым элементом:
    $("body").on('DOMSubtreeModified', "#id", function(e) {
    console.log(e);
    });

    Допустим элемент #id изначально пустой.
    Пробую такую последовательность
    $('#id').html(""); — вызывает функцию 1 раз
    $('#id').html("hello"); — вызывает функцию 1 раз
    $('#id').html("тест"); — вызывает функцию 2 раза
    $('#id').html("next"); — вызывает 2 раза.
    $('#id').html(""); — вызывает функцию 1 раз

    Конкретно для этого примера понимаем, что запись в пустой элемент вызывает функцию 1 раз.
    Перезапись непустого элемента - 2 раза, видимо:
    1 вызов - Очистка элемента
    2 вызов - Заполнение элемента.

    И все же рекомендуется переходить на MutationObserver.
    Ответ написан
    Комментировать
  • Как можно обрезать несколько слов одновременно при регулярном выражение?

    @rotarepmipoleved
    Объединить необходимые слова и сокращения в одно регулярное выражение.
    При этом учесть границы "мусорных" слов, чтобы не влезать в середину других слов (например, Булгаков => Бгаков).

    https://regex101.com/r/m9bloz/3
    Ответ написан
    Комментировать
  • Проблема с кодировкой JSON?

    @rotarepmipoleved
    Попробуйте добавить в список опций:
    CURLOPT_ENCODING => ""
    Ответ написан
    Комментировать
  • Почему скобка в регулярном выражении не экранируется?

    @rotarepmipoleved
    \bK\[Al\(OH\)4\](?=\s|\b)

    https://regex101.com/r/Fv6Qc9/3
    Ответ написан
    Комментировать
  • Как индексировать одна ко многим таблиц на sphinx?

    @rotarepmipoleved
    Предлагаю посмотреть со стороны корректировки архитектуры для конкретного случая.
    Таблицы parent и child можно объединить в одну - family, получив структуру аналогичную таблице child.
    - id
    - parent_id
    - name
    - age

    Получим что-то вроде:
    --------------------------------
    id | parent_id | name | age
    --------------------------------
    1 | 0 | Отец | 30
    2 | 1 | Дочь | 9
    3 | 1 | Дочь2 | 7
    4 | 0 | Отец2 | 41
    5 | 4 | Дочь3 | 12

    Тогда в самом индексе получим три поля:
    - name
    - age
    - parent_id

    Ищем среди родителей:
    WHERE parent_id = 0 AND MATCH('@name "Отец"')

    Ищем среди детей:
    WHERE parent_id > 0 AND MATCH('@name "Дочь"')

    Есть еще минимум 1 вариант избегания дублей информации - группировать по необходимому признаку и конкетировать поля с помощью MySQL функции GROUP_CONCAT использовав разделитель для дальнейшего обращения в массив.
    Например, при группировке по полю parent_name нужно конкетировать 3 поля - child_id, child_name, child_age:
    SELECT \
            row_number() OVER () AS id, \
            p.id as parent_id, \
            p."name" as parent_name, \
            p.age as parent_age, \
            GROUP_CONCAT(ch.id SEPARATOR '|') as child_id, \
            GROUP_CONCAT(ch.name SEPARATOR '|') as child_name, \
            GROUP_CONCAT(ch.age SEPARATOR '|') as child_age\
    FROM parent p\
    JOIN child ch ON ch.parent_id=p.id\
    GROUP BY parent_id


    При SELECT * FROM index WHERE parent_id = 1 получим что-то подобное:
    ----------------------------------------------------------------------------
    id | parent_id | parent_name | child_id | child_name | child_age
    ----------------------------------------------------------------------------
    1 | 1 | Отец | 1|2|3 | aa|ab|ac | 2|3|4

    После выполнения запроса конкетированые строки нужно обработать для нормальной работы с child_* полями.

    В целом, способ и саму необходимость каких-либо изменений хорошо определять опираясь на конкретные задачи.
    Ответ написан
    Комментировать