Регулярні вирази Java на прикладі адреси електронної пошти

Символи у квадратних дужках вказують інтервал можливих буквених значень. У фігурних дужках ми описуємо допустиму кількість символів, зазначених раніше. Зліва від коми вказано мінімальне значення (одиниця), праворуч – максимальне. Відсутність значення, як і нашому випадку, свідчить, що кількість символів немає максимального значення. Паттерн також може містити суворо фіксоване число символів або не містити його зовсім. У разі символ може бути використаний лише один раз. Далі у нашому патерні може бути знак тире. "Можливо" означає, що символ буде присутній у патерні або один раз, або жодного разу, отже:
У разі присутності тире, як ми вже обмовили, після нього обов'язково повинна слідувати хоча б одна буква, тобто. Початковий патерн повторюється. Символ тире позначається як [\\-]:
Крім цього, у рядку також може бути точка ([\\.]), після якої, знову-таки, повинен слідувати буквений символ:
Оскільки описаний патерн лівої частини повинен повторюватися, ми позначимо це у такому вигляді:
Знак плюса після загальної дужки означає, що патерн може повторюватися від одного разу до невизначеної кількості разів. Оскільки ліву частину від правої відокремлює собачка, ми вказуємо, що після лівої частини в обов'язковому порядку буде присутній цей символ:
Права частина патерну повинна містити в собі вже згаданий набір букв у кількості від одного до нескінченності з обов'язковою наявністю точки наприкінці. Як і в попередньому випадку, патерн до крапки може повторюватися:
Наприкінці патерну повинні знову слідувати символи, причому у кількості від двох до чотирьох:
Ось, власне, і весь патерн. Чи не маленький, не знаходите? На щастя, єспосіб дещо скоротити цей набір, зробивши його більш читабельним та легким для сприйняття. Для початку існує спосіб одночасного вираження наявності тире або точки в патерні. Замість того, щоб окремо пропсувати всі крапки ([\\.]) та тире ([\\-]), їх можна виразити єдиним символом -[\\.-]. Використовуючи його, ми можемо скоротити патерн до наступного:
Також існує символ, який може означати будь-яку букву або цифру -\w. Тобто. він здатний замінити опис типу [A-Za-z0-9]:
Так як знак плюсу означає наявність символу в кількості від одного до нескінченності, описане вище також можна звести до:
Крім того, наявність символу не більше одного разу можна позначити символом?:
Існує також знак, що означає наявність чогось у патерні невизначену кількість разів, тобто. . Позначається як *. У підсумковому варіанті ми маємо таке:
Подібний патерн набагато компактніший, ніж те, до чого ми дійшли раніше. Все, що нам тепер залишається – це реалізувати формальну частину програми, використовуючи наш готовий патерн та булеву змінну:
Як саме використовувати цю булеву змінну – це вже справа смаку чи можливостей. Ключові моменти вже готові і подальша доопрацювання залишається цілком за Вами. Сподіваюся, цей винахід був досить доступним. І звичайно ж, дерзайте.
А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»