Ad Widget

Collapse

Регулярные выражения - Предобработки

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Scorpey
    Member
    • Oct 2010
    • 97

    #1

    Регулярные выражения - Предобработки

    Здравствуйте.
    Никак не могу справиться с регулярными выражениями:
    Имею строку:
    7789 124 606689 139126 14136 1064 153804 146578 0 59407 285833

    В зависимые данные нужно вносить каждую цифру.
    Выбираю - Регулярное выражение
    Параметр - (.\d+)
    вывод \2

    Хочу увидеть 124 но вывод пуст.

    Вывод \0 дает 7789

    При параметре: (.\d+){3}
    и выводе: \0
    получаю 7789 124 606689

    т.е. грануляция по группам цифр происходит. Как выделить 1 группу, затем вторую и так далее. Спасибо.
  • artemyankovskiy
    Junior Member
    • Jun 2020
    • 5

    #2
    Добрый день.
    Вы выбираете одну группу. Заббикс не добавляет модификатор /g. То есть вы можете переписать на нечто подобное:
    (\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\ d+).(\d+).(\d+)

    Но тут стоит обратить внимание, что в заббиксе ограничение - десять элементов, которые вы можете взять через \N, причем 0 <= N <= 9
    Для вашей задачи судя по всему это не лучшее решение и стоит рассмотреть другое, например переписать на JS

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #3
      Originally posted by Scorpey
      В зависимые данные нужно вносить каждую цифру.
      Выбираю - Регулярное выражение
      Параметр - (.\d+)
      вывод \2
      Я так понял, что, всё же, не "каждую цифру", а каждое число (ограниченное пробелами либо началом/концом строки).
      Как уже верно отметили, таким регулярным выражением задаётся лишь одна поисковая группа, поэтому ссылаться на вторую ("\2") - некорректно.
      Решение может быть, например, такое:
      Для первого числа:
      Code:
      ^(\d+)
      Для второго числа:
      Code:
      ^(?:\d+)\s(\d+)
      Для третьего чила:
      Code:
      ^(?:(?:\d+)\s){2}(\d+)
      Для четвёртого чила:
      Code:
      ^(?:(?:\d+)\s){3}(\d+)
      ...и т.д., увеличивая число в фигурных скобках, которое указывает, сколько чисел перед ним нужно пропустить.
      Во всех случаях результат будет в первой поисковой группе, т.е. в подстановке нужно указывать: "\1".

      Comment

      • Scorpey
        Member
        • Oct 2010
        • 97

        #4
        Originally posted by artemyankovskiy
        Добрый день.
        Вы выбираете одну группу. Заббикс не добавляет модификатор /g. То есть вы можете переписать на нечто подобное:
        (\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\ d+).(\d+).(\d+)

        Но тут стоит обратить внимание, что в заббиксе ограничение - десять элементов, которые вы можете взять через \N, причем 0 <= N <= 9
        Для вашей задачи судя по всему это не лучшее решение и стоит рассмотреть другое, например переписать на JS
        Да, так и есть.

        Comment

        Working...