Программирование для тех кто хотел бы его изучить часть 4. Погружение в ад. Регулярные выражения. Ч2
Я надеюсь вы готовы и попробовали себя в регулярных выражениях, находили слова, пробелы, меняли строку. Погружаемся в регулярные выражения по грудь.
Итак начнем из комментариев:
- ни когда не мог понять как можно программно все это реализовать, и примеры смотрел и читал литературу, не мог просто и все...регулярные выражения худо-бедно мог составлять, а дальше как о стену...-
Регулярные выражения, это чистая математика. Существует дисциплина, Теория Автоматов. Теория Автоматов повсеместно применяется в вычислительной технике. И любой ПК по сути является конечным автоматом. Более того, ТА используют для написания компиляторов, парсеров, языков программирования (перл очень любит регулярки, Ларри Уолл сейчас должен икать, если он ваш сосед, проверьте как он там), итд. Естественно регулярные выражения тоже автомат. Но только более простой чем скажем ПК.
Чтобы объяснить регулярные выражения, я прошу представить строку в виде ленты с дырочками разного размера и формы, по этим дырочкам скользит считывающая головка (слышен смешок из 5 Б), считав дырочку, нам на дисплее показывается буква или символ. Естественно, мы управляем головкой путем передачи ей определенных правил. К сожалению, нам приходится управлять, если бы машина могла бы сама управлять собой, то я бы прислал открытку с соболезнованиями всем Сарам Конор.
Наши команды - это правильно написанные шаблоны, наша строка бумажная лента. Наше дело правое и мы добьемся от машины того чего хотим.
Циклы.
К сожалению программистам ввиду лени неудобно описывать каждый символ, делать из него шаблон итд. Поэтому другие ленивые программисты придумали циклы. Т.е. мы говорим через управляющую клавиатуру сколько однотипных команд должна сделать считывающая головка.
символы цикла:
+ - хотя бы 1 удовлетворяющее шаблону верно
* - 0 удовлетворений.
Эти циклы можно писать и вот так:
{1,} - соотвественно +
{0,} - соотвественно *
можно явно указать количество итераций (количество раз) которое должна пройти головка,
например {1,4}
ВНИМАНИЕ: Некоторые языки программирования/софт не поддерживают {1,} конструкции.
Строка:
Котейка на когтеточке выдавал нам песни группы Ария
Что мы можем делать с циклами? В прошлом посте мы брали все слова. если бы мы написали [а-яА-Я] без цикла, то мы бы получили 43 символа, с + мы получили 7 подстрок в строке.
теперь давайте найдем слова в строке:
Котейка, когтеточец, терракоторый котлета
как я писал выше, давайте найдем слово "терракоторый"
[а-яА-Я]+кот[а-яА-Я]+
Что я сейчас сделал? Я "попросил" найти слово которое будет искать сначала любые буквы до символов "кот" и, найдя его допишет остаток слова. Результат удовлетворяющий моему шаблону программа выведет на экран.
[Кк]от[а-я]+
Выведет Котейка, когтеточец, котлета
Тут я "попросил" найти слова которое будет искать большую или малую [Кк] в начале, далее строгое соотвествие на "от" и дописывать остаток слов.
Постарайтесь поиграться с циклами.
Специально для пикабу.
http://www.pcre.ru/eval/ - он лайн регулярные выражения
PS За ошибки не ругаем я не Даль.
Итак начнем из комментариев:
- ни когда не мог понять как можно программно все это реализовать, и примеры смотрел и читал литературу, не мог просто и все...регулярные выражения худо-бедно мог составлять, а дальше как о стену...-
Регулярные выражения, это чистая математика. Существует дисциплина, Теория Автоматов. Теория Автоматов повсеместно применяется в вычислительной технике. И любой ПК по сути является конечным автоматом. Более того, ТА используют для написания компиляторов, парсеров, языков программирования (перл очень любит регулярки, Ларри Уолл сейчас должен икать, если он ваш сосед, проверьте как он там), итд. Естественно регулярные выражения тоже автомат. Но только более простой чем скажем ПК.
Чтобы объяснить регулярные выражения, я прошу представить строку в виде ленты с дырочками разного размера и формы, по этим дырочкам скользит считывающая головка (слышен смешок из 5 Б), считав дырочку, нам на дисплее показывается буква или символ. Естественно, мы управляем головкой путем передачи ей определенных правил. К сожалению, нам приходится управлять, если бы машина могла бы сама управлять собой, то я бы прислал открытку с соболезнованиями всем Сарам Конор.
Наши команды - это правильно написанные шаблоны, наша строка бумажная лента. Наше дело правое и мы добьемся от машины того чего хотим.
Циклы.
К сожалению программистам ввиду лени неудобно описывать каждый символ, делать из него шаблон итд. Поэтому другие ленивые программисты придумали циклы. Т.е. мы говорим через управляющую клавиатуру сколько однотипных команд должна сделать считывающая головка.
символы цикла:
+ - хотя бы 1 удовлетворяющее шаблону верно
* - 0 удовлетворений.
Эти циклы можно писать и вот так:
{1,} - соотвественно +
{0,} - соотвественно *
можно явно указать количество итераций (количество раз) которое должна пройти головка,
например {1,4}
ВНИМАНИЕ: Некоторые языки программирования/софт не поддерживают {1,} конструкции.
Строка:
Котейка на когтеточке выдавал нам песни группы Ария
Что мы можем делать с циклами? В прошлом посте мы брали все слова. если бы мы написали [а-яА-Я] без цикла, то мы бы получили 43 символа, с + мы получили 7 подстрок в строке.
теперь давайте найдем слова в строке:
Котейка, когтеточец, терракоторый котлета
как я писал выше, давайте найдем слово "терракоторый"
[а-яА-Я]+кот[а-яА-Я]+
Что я сейчас сделал? Я "попросил" найти слово которое будет искать сначала любые буквы до символов "кот" и, найдя его допишет остаток слова. Результат удовлетворяющий моему шаблону программа выведет на экран.
[Кк]от[а-я]+
Выведет Котейка, когтеточец, котлета
Тут я "попросил" найти слова которое будет искать большую или малую [Кк] в начале, далее строгое соотвествие на "от" и дописывать остаток слов.
Постарайтесь поиграться с циклами.
Специально для пикабу.
http://www.pcre.ru/eval/ - он лайн регулярные выражения
PS За ошибки не ругаем я не Даль.