Я столкнулся с задачей: Надо написать проверку, что перед каждым символом ‘a’ в строке находится нечётное число символов. Например, для строк ‘b’ и ‘ba’ эта проверка должна выдавать true, а для строк ‘a’ и ‘aa’ — false.
Начнем решать эту задачу поэтапно, так как ее решение выглядит следующим образом
Понять его сразу довольно сложно, а некоторые пишут, что смотреть чужие решения по регулярным выражениям и вовсе бессмысленно, так как их не прочитать. Но я хочу развеять этот миф и покажу вам, как прочитать данное решение или как к нему придти за 15 минут.
Итак, начнем. Первое, что нужно сделать – это разобраться с элементарными вещами, а именно:
Подробнее можно прочитать в списке литературы и особенно тут.
Двигаемся дальше. Нам нужно создать шаблон, который будет удовлетворять любому числу любых нечетных букв, находящемуся перед одной буквой а для начала. Для этого можно воспользоваться следующим приемом: создаем шаблон для четного числа букв и добавляем еще одну букву.
Согласно обозначениям сверху, следующая запись означает, что шаблон требует 2 любые буквы, кроме а.
Теперь объединяем эту запись в круглые скобки и ставим после нее звездочку. Это означает, что теперь 2 буквы кроме буквы а могут встречаться любое число раз, включая ноль:
Если мы перед предыдущей записью добавим еще одну букву, не равную а в обязательном порядке, то мы получим в итоге шаблон, который требует либо 1 букву, либо нечетное их число:
Допишем букву а в конце, это означает, что перед а – любое нечетное число букв и сама буква а добавилась:
Список использованных ссылок:
- http://www.learn-javascript-tutorial.com/RegularExpressions.cfm
- http://www.regular-expressions.info/javascriptexample.html – Инструмент для тестирования выражений
- http://www.javascriptkit.com/javatutors/re.shtml
- http://www.sql.ru/forum/actualthread.aspx?bid=34&tid=858526
- http://www.codeproject.com/KB/dotnet/regextutorial.aspx
- http://msdn.microsoft.com/ru-ru/library/28hw3sce.aspx
- http://www.rsdn.ru/article/alg/regular.xml
- http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
- http://www.intuit.ru/department/ds/discrmath/1/ – немного дискретной математики и потом идет курс по конечным автоматам, полезно почитать
– самая полезная для меня статья оказалась