Ответы пользователя по тегу Регулярные выражения
  • Регулярное выражение, проверяющее, что перед каждым символом 'a' в строке находится чётное число символов

    susl
    @susl
    для простоты, предположим что алфавит у нас из 2х символом a и b (в «настоящих» регулярках это b есть «все кроме a»), тогда (ab | bb)*(a|b|epsilon) есть решение (я использую классическое определение регулярного выражения)
    что любое слово из определения входит в наш язык и наоборот любое слово в нашем языке подходит под определение, доказать можно просто по (сильной) индукции по длине слова (в шаге индукции нужно лишь рассматривать отдельно случаи четной и нечетной длины)
    на языке «программистских» регулярок получится что-то типа /^((a|[^a])[^a])*(a|[^a])?$/
    ну или если упростить («а | [^a]» есть любой символ, т.е. просто "."), то /^(.[^a])*.?$/

    на самом деле в таких «заковыристых» случаях вернее всего нарисовать автомат и сконвертить его в регулярку.
    на автомате еще и проще доказать будет :)
    надеюсь не ошибся нигде ;)
    Ответ написан
    6 комментариев