Рассматриваемые в этой книге принципы работы механизма регулярных выражений, сравниваемые функциональные возможности разных языков программирования и их инструментальных средств и подробно обсуждаемая оптимизация помогут вам добиться успехов в экономии вашего времени. Эта книга обучит вас правильному конструированию регулярных выражений для разнообразных ситуаций, а вы сразу сможете применить полученные знания для вырабатывания простых и экономичных решений огромного числа проблем. Автор также поможет вам научиться избегать наиболее распространенных ошибок, демонстрируя их.
Регулярные выражения для простых смертных / Блог компании Издательский дом «Питер» / Хабрахабр. Здравствуйте, уважаемые дамы и господа. Мы активно ищем свежую литературу на тему регулярных выражений для начинающих. Причем в данном случае нас бы скорее привлекла не переводная, а исходно русскоязычная книга, которая каким- то образом затрагивала бы и регулярные выражения при обработке естественного языка. Хотим предложить вашему вниманию следующий текст — во- первых, напомнить об этой теме, во- вторых, продемонстрировать примерный уровень сложности, который нас интересует Рано или поздно вам придется иметь дело с регулярными выражениями. Притом, какой у них сложный синтаксис, путаная документация и жесткая кривая обучения, большинство разработчиков удовлетворяются следующим: копипастят выражение со Stack. Overflow и надеются, что оно будет работать.
Но что если бы в самом деле могли расшифровывать регулярные выражения и пользоваться ими на всю катушку? В этой статье я расскажу, почему следует еще раз присмотреться к регулярным выражениям, и как они могут пригодиться на практике.
Зачем нужны регулярные выражения? Зачем вообще возиться с регулярными выражениями? Чем они могут помочь именно вам?
Сравнение с шаблоном: Регулярные выражения отлично помогают определять, соответствует ли строка тому или иному формату – например, телефонному номеру, адресу электронной почты или номеру кредитной карты. Замена: При помощи регулярных выражений легко находить и заменять шаблоны в строке. Так, выражение text. Например, name. matches(/^(Mr. Синтаксис в основном стандартизирован, поэтому вам не придется переучиваться регулярным выражениям при переходе на новый язык.
Код: Когда пишете код, можно пользоваться регулярными выражениями для поиска информации в файлах; так, в Atom для этого предусмотрен find and replace, а в командной строке — ack. Четкость и лаконичность: Если вы с регулярными выражениями на «ты», то сможете выполнять весьма нетривиальные операции, написав минимальный объем кода. Как писать регулярные выражения. Регулярные выражения проще всего изучить на примере.
Допустим, вы пишете веб- страницу, на которой будет поле для ввода телефонного номера. Поскольку вы — ас веб- разработки, вам хочется дополнительно отображать на экране галочку, если телефонный номер валиден, и крестик X — если нет.< input id=. Если пользователь уберет курсор из поля ввода, а в поле при этом останется недопустимое значение, то отобразится крестик.
Поскольку вы знаете, что телефонные номера состоят из десяти цифр, первым делом проверяете, чтобы is. Phone. Number выглядел так: function is. Phone. Number(string) . Метод test возвращает true, если регулярное выражение соответствует строке, в противном случае – false. Если выполнить is. Phone. Number(! Ура!
Однако, писать десять \d – слегка муторная работа. К счастью, то же самое можно сделать и при помощи фигурных скобок.
Phone. Number(string) . Правда было бы неплохо, если бы ваше регулярное выражение обрабатывало и такие случаи? Это можно сделать при помощи символа? Phone. Number(string) ? Оказывается, is. Phone.
Number(. Проблему можно решить, воспользовавшись якорями ^ и $. Phone. Number(string) . В США телефонный номер можно записать разными способами: (2. Хотя пользователи и могут обойтись без пунктуации, им было бы гораздо проще вводить заранее отформатированный номер. Пусть вы и могли бы написать регулярное выражение для обработки всех этих форматов, думаю, что это плохая идея. Как бы тщательно вы ни старались учесть все форматы, все равно какой- нибудь пропустите. Кроме того, в действительности вам интересны только сами данные, а не их форматирование.
Итак, чем возиться со всей этой пунктуацией, не проще ли избавиться от нее? Phone. Number(string) . Глобальный флаг g приказывает функции заменить на регулярное выражение все совпадения, а не только первое. Еще более серьезный пример. Ваша страница с телефонными номерами всем нравится, в офисе вы – король кулера.
Однако, такие профессионалы как вы не останавливаются на достигнутом, поэтому вы хотите сделать страницу еще лучше. North American Numbering Plan – это стандарт по составлению телефонных номеров, используемый в США, Канаде и еще 2. В этой системе есть несколько простых правил: Телефонный номер ((2.
АТС (5. 67) и номер абонента (8. В региональном коде и коде АТС первая цифра может быть любой от 2 до 9, а вторая и третья цифры – от 0 до 9. В коде АТС 1 не может быть третьей цифрой, если вторая цифра – это 1. Ваше регулярное выражение уже соответствует первому правилу, но нарушает второе и третье. Пока давайте разберемся со вторым.
Новое регулярное выражение должно выглядеть примерно так: /^1?< AREA CODE> & lt. EXCHANGE CODE> & lt. SUBSCRIBER NUMBER> ;/Номер абонента прост, он состоит всего из четырех цифр/^1?< AREA CODE> & lt.
EXCHANGE CODE> \d. Нас интересует цифра от 2 до 9, за которой идут еще две цифры. Для этого можно использовать символьное множество! Символьное множество позволяет задать группу символов, из которых затем можно выбирать. Сделаем код еще чище при помощи символьного диапазона./^1?!
Поскольку региональный код такой же, как и код АТС, можно просто продублировать регулярное выражение, чтобы довести этот шаблон до ума. Все упростится, если использовать группу! Чтобы сгруппировать символы, их нужно просто заключить в круглые скобки. Рассмотрим окончательный вариант функцииis. Phone. Number: function is. Phone. Number(string) . Нет никакого смысла проявлять чрезмерную строгость, когда пишешь регулярные выражения.
В случае с телефонными номерами, даже если мы учтем все правила из документа NANP, все равно невозможно определить, реален ли данный телефонный номер. Если я заделаю номер(5. Не пишите HTML- парсер. Хотя регулярные выражения отлично подходят для парсинга каких- то простых вещей, синтаксический анализатор для целого языка из них не сделаешь. Если вы не любите заморачиваться, то вам вряд ли понравится разбирать нерегулярные языки при помощи регулярных выражений. Все Бои Виталия Кличко здесь.
Не используйте их с очень сложными строками. Полное регулярное выражение для работы с электронной почтой состоит из 6 3. Простое и приблизительное выглядит так: /^. Общее правило таково: если у вас получается регулярное выражение длиннее одной строки кода, то, возможно, стоит поискать другое решение.