Ad Widget

Collapse

Непонятное с регулярными выражениями

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Ajax
    Junior Member
    • Feb 2014
    • 9

    #1

    Непонятное с регулярными выражениями

    Нужен совет по регулярным выражениям. На zabbix 2.0.8 пытаюсь исключить ненужные интерфейсы, но выражение никак не срабатывает. Проверил на regexpal.com — там всё в порядке, а zabbix никак не "допрёт". Пробовал также варианты с инверсией по ?!, естественно с другим логическим результатом, — всё так же. Простые regexp'ы типа ^usb работают, а со сложными беда.
    Attached Files
  • AllertGen
    Member
    • Dec 2013
    • 30

    #2
    Попробуйте в тест забивать не все интерфейсы, а по одному. Просто если в тест вбивать все интерфейсы, он (zabbix) считает это одной строкой (каждый переход на новую строку - символ). Соответственно под общее правило это не попадает и он даёт такой ответ.

    Comment

    • ArtemK
      Senior Member
      • May 2013
      • 232

      #3
      \w+ у вас не будет работать

      Comment

      • pzabortsev
        Senior Member
        • Dec 2012
        • 338

        #4
        Originally posted by ArtemK
        Скорее всего это вообще лишнее здесь.
        Уберите из regexp'a вот это "\w+$" и проверьте - должно работать

        Comment

        • AllertGen
          Member
          • Dec 2013
          • 30

          #5
          Originally posted by pzabortsev
          Скорее всего это вообще лишнее здесь.
          Уберите из regexp'a вот это "\w+$" и проверьте - должно работать
          Нет, не лишнее. Человек хотел, что бы проверка была на разное окончание (т.е., например, под правило ipwl попадали бы так же ipwl0, ipwlif и т.д.). А вообще, раз не работает \w, то я бы тогда поменял правило в скобке и поставил после каждого искомого слова .*. Например, ipwl.*|plip.* и т.д.

          Comment

          • ArtemK
            Senior Member
            • May 2013
            • 232

            #6
            так надо всего-лишь поменять \w+ на [[:alnum:]]+

            Comment

            • pzabortsev
              Senior Member
              • Dec 2012
              • 338

              #7
              Originally posted by AllertGen
              Нет, не лишнее. Человек хотел, что бы проверка была на разное окончание (т.е., например, под правило ipwl попадали бы так же ipwl0, ipwlif и т.д.)
              Судя по исходному regexp, я понял, что человек хочет отбросить все интерфейсы, имя которых начинается с перечисленных им сокращений + минимум один буквенный или цифровой символ или знак подчёркивания.
              Т.е. он хотел отбрасывать ipwl0 и ipwlif, но оставлять ipwl.
              Тогда проблемы быть не должно, если убрать из исходного regexp "\w+" (символ $ нужно оставить, тут я не прав) и изменить результат на "Result is TRUE".

              Ajax, проявитесь! А то мы тут дофантазируемся по Вашей проблеме весьма далеко ))

              Comment

              • Ajax
                Junior Member
                • Feb 2014
                • 9

                #8
                Спасибо за ответы, собственно всё было в первом посте ArtemK. При чём [[:alnum:]] не работает, хотя [[:digit:]] (к примеру) работает где нужно, но это скорее проблема связки zabbix 2.0.8 + php 5.5.8.

                Вопрос с интерфейсами решился комбинированием одиночных простых правил:
                Code:
                1	 »	^gif	 [Результат БРЕХНЯ]
                2	 »	^fw	 [Результат БРЕХНЯ]
                3	 »	^plip	 [Результат БРЕХНЯ]
                4	 »	^ipfw	 [Результат БРЕХНЯ]
                5	 »	^usb	 [Результат БРЕХНЯ]
                6	 »	^stf	 [Результат БРЕХНЯ]
                Результат более чем полностью работает. Если вдруг кому интересно то такой зоопарк интерфейсов из-за сети в которой мониторятся freebsd + os x сервера.

                Comment

                • ArtemK
                  Senior Member
                  • May 2013
                  • 232

                  #9
                  дык так и в одну строку будет работать, как pzabortsev написал, достаточно убрать \w+$ в конце

                  Comment

                  • Ajax
                    Junior Member
                    • Feb 2014
                    • 9

                    #10
                    Так в том-то и дело что не работало

                    Comment

                    • AllertGen
                      Member
                      • Dec 2013
                      • 30

                      #11
                      Ну, я тоже ранее писал как вариант в одну строчку: ^(gif.*|fw.*|plip.*|ipfw.*|usb.*|stf.*)$
                      Потому что что запись .* означает любой символ повторяющийся 0 и более раз.

                      Comment

                      • ArtemK
                        Senior Member
                        • May 2013
                        • 232

                        #12
                        угу, только так красивее, не?
                        Code:
                        ^(gif|fw|plip|ipfw|usb|stf)
                        без символа конца строки тоже ведь будет только указанные варианты рассматривать в начале строки, а то что после - пофиг

                        Comment

                        Working...