Ad Widget

Collapse

РРРегулярки

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • teddy
    Senior Member
    • Dec 2017
    • 234

    #1

    РРРегулярки

    Дано Zabbix 6.4.18

    Имеем строки:
    строка1 = ВсякаяРазнаяВсячина O=Петров Вася;CN=Шофер;РазноеВсякоеТекст
    строка2 = ВсякаяРазнаяВсячина O=Петров Вася;Title=Машина;CN=Шофер;РазноеВсякоеТекст
    применяем RegExp: O=(.*);(CN|Title)
    И просим показать т.н группу 1 т.е \1
    И тут получаю странное: в первом случае имею результат Петров Вася, а во втором Петров Вася;Title=Машина
    Кто может пояснить почему? Почему во втором случае не сработает Title?
    и что самое для меня странное если сократить строку2 до ВсякаяРазнаяВсячина O=Петров Вася;Title=Машина; то регулярка сработает как надо. первая група будет \1 = Петров Вася
    причем в OnlineRegexp calculator всякий все работает как надо.
    Last edited by teddy; 22-10-2024, 15:50.
  • Answer selected by Hamardaban at 22-10-2024, 18:03.
    Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    Потому, что под ваше выражение подходит и вариант в котором O=(Петров Вася;Title=Машина);CN
    в жадном режиме регулярка хватает всё что может.
    Попробуйте
    Code:
    O=(.*?);(CN|Title)
    или
    Code:
    O=([^;]*);
    Last edited by Hamardaban; 22-10-2024, 16:15.

    Comment

    • Hamardaban
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • May 2019
      • 2713

      #2
      Потому, что под ваше выражение подходит и вариант в котором O=(Петров Вася;Title=Машина);CN
      в жадном режиме регулярка хватает всё что может.
      Попробуйте
      Code:
      O=(.*?);(CN|Title)
      или
      Code:
      O=([^;]*);
      Last edited by Hamardaban; 22-10-2024, 16:15.

      Comment

      • teddy
        Senior Member
        • Dec 2017
        • 234

        #3
        Originally posted by Hamardaban
        Потому, что под ваше выражение подходит и вариант в котором O=(Петров Вася;Title=Машина);CN
        в жадном режиме регулярка хватает всё что может.
        хм. неожиданно но понятно
        как отучить от жадности? ну или как подправить регулярку? есть идеи?

        Comment

        • teddy
          Senior Member
          • Dec 2017
          • 234

          #4
          !!! вот спасибо
          O=([^;]*); самое оно. еще потестирую но вроде б везде работает как надо

          Comment

          Working...