1. Куча / Говнокод #13567

    +138

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    Шаблон 
    
    (\$*(\d*(\.+\d+)?){1})
    
    Шаблон замены
    
    **$&
    
    Вход
    
    $1.30
    
    Выход
    
    **$1.30**
    
    А теперь вопрос знатокам: Каким жестоким человеком нужно быть, что бы засунуть в пример регулярку, которая может соответствовать 0(?!) символов?

    Все та же статья MSDN
    http://msdn.microsoft.com/ru-ru/library/az24scfc.aspx

    Запостил: kegdan, 08 Августа 2013

    Комментарии (12) RSS

    • \$?(\.+)?(\d+)(?(1)|(\.+\d+)?)

      Думаю так удачнее
      Ответить
      • То, что не хавает "5." так и задумано?

        Если да, то, имхо, достаточно вот такой регулярки:
        \$*(\d*\.)?\d+
        P.S. Ну и еще косяк - $$5.2 ваш код заменит на $**$5.2**.
        Ответить
        • Небольшой юнит-тест, поясняющий мое понимание задачи: http://ideone.com/NfbTbf.

          P.P.S. В строке "5." действительно лучше не оборачивать точку в звездочки, т.к. "You must pay only 5$." оттранслируется в "You must pay only **5$**.", а не в некошерное "You must pay only **5$.**"
          Ответить
          • http://ideone.com/k4uiEz
            мое понимание задачи

            Регулярки полностью совпадают, но Ваша проще)
            Ответить
        • >То, что не хавает "5." так и задумано?

          Да, я писал так, что бы после точки обязательно шло число

          > \$*(\d*\.)?\d+

          Да, так проще, я перемудрил)
          Если честно я с регулярками второй день знаком.

          >P.S. Ну и еще косяк - $$5.2 ваш код заменит на $**$5.2**.

          Нет, все правильно заменяет $$5.2 на $**$5.2

          Вы имеете в виду, что не все $ захватит? ну так оно и задумано)
          Ответить
    • {1} порадовало :) Теперь буду добавлять {1} к каждому символу и каждой группе. А вдруг без {1} не один раз заматчится... не зря же майкрософт так делает.

      В шаблоне замены **$&** или все-таки **$&?
      Ответить
      • он в конце находит совпадение длинной 0 и дописывает **)))
        Ответить
        • Вот пример этой регурярки с входной строкой "microsoft suck"

          **m**i**c**r**o**s**o**f**t** **s**u**c**k**
          Ответить
          • > **m**i**c**
            Да я тестил ;)

            > он в конце находит совпадение длинной 0 и дописывает **
            Выставили баг своей регулярки как фичу. М$ всегда так поступает ;)

            > Вы имеете в виду, что не все $ захватит? ну так оно и задумано)
            Ну ок, с \$? вместо \$* действительно будет логичней. Меня просто переклинило, показалось что $$ обозначают центы.

            P.S. MSDN это далекооо не самое подходящее место для изучения регулярок ;)
            Ответить
            • >MSDN это далекооо не самое подходящее место для изучения регулярок ;)

              я буквально на днях прочел
              "Бен Форта - Регулярные выражения. 10 минут на урок"

              чем можно дополнить?
              Ответить
              • > чем можно дополнить?
                Практикой ;) Синтаксис у регулярок очень простой, разобрать и запомнить его можно буквально за пару часов, но нужно набить руку в их написании и чтении. Подумай, где бы ты хотел применить регулярку и напиши ее, потестируй на разных примерах. Еще попробуй почитать регулярки из реальных проектов, пытаясь понять, что они делают. Именно так я их и изучал.

                P.S. Можно еще вот тут поиграться: http://regexcrossword.com/
                Ответить
                • там я уже все решил)
                  и этот решил)
                  http://habrahabr.ru/post/175847/

                  Спасибо за совет)
                  Буду практиковаться)
                  Ответить

    Добавить комментарий