Ad Widget

Collapse

Глобальный поиск в регулярном выражении

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Whols
    Senior Member
    • Jul 2018
    • 133

    #1

    Глобальный поиск в регулярном выражении

    День добрый! Есть портянка текста, предобработкой извлекаю значения повторяющихся параметров. Паттерн вида:
    Code:
    <pattern>\s+(\S+)\n.*<pattern>\s+(\S+)(?s).*<pattern>\s+(\S+)
    работает. Но хотелось бы оптимизировать шаблон. Тут https://regexr.com/ я при глобальном поиске (/g) получаю все вхождения при выражении: <pattern>\s+(\S+)\n, но в предобработке глобальный поиск не работает (работает до первого вхождения). Как то можно его включить или это ограничение ядра?
    Last edited by Whols; 27-11-2020, 09:37.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Originally posted by Whols
    в предобработке глобальный поиск не работает (работает до первого вхождения). Как то можно его включить или это ограничение ядра?
    Увы, ограничение. Сам однажды потратил много времени в попытках сделать глобальную замену через регулярные выражения в предобработке, пока мне об этом явно не сообщили инженеры техподдержки.
    В то же время теперь задача элементарно решается через простое обращение к Javascript. Например, заменить все запятые символом "перевод строки":
    Code:
    return value.replace(/\,/g,"\n")

    Comment

    • Whols
      Senior Member
      • Jul 2018
      • 133

      #3
      Спасибо. Если я правильно понял - /g (глобально), "\n" собсно символ перевода строки, а вот этого /\, не понял. Разве не "," ?
      -
      Разобрался. Экранирование. Почему то после кавычек / не принимает (или принимает как часть незавершенного экранирования). В моем случае работает так:
      Code:
      return value.replace(/\n/g,";")
      Last edited by Whols; 27-11-2020, 11:12.

      Comment

      • Whols
        Senior Member
        • Jul 2018
        • 133

        #4
        В общем, глобальная замена - это хорошо. Но глобальный поиск пока обойти не удалось.
        -
        Странно вот что: в прилетающем тексте символ начала и конца строки расположены соответственно в начале текста и в конце ВСЕГО текста (не строки). Символы переноса строки я заменил. По идее у меня должен быть однострочный длиннющий текст. Но нет, все равное происходит некое форматирование. Не пойму, /g на что-то ведь должен ориентироваться, чтобы разделять глобальный\не глобальный поиски...
        Last edited by Whols; 27-11-2020, 12:11.

        Comment

        Working...