Регулярные выражения или «регулярные выражения» — это то, что я часто использовал в прошлом, но так и не понял полностью. Всегда было проще использовать чужое регулярное выражение для проверки входных данных или анализа данных. На мой неопытный взгляд это выглядело как мешанина из случайных букв, цифр и специальных символов. Будет справедливо сказать, что я был напуган.

Что такое регулярные выражения?

Во-первых, регулярное выражение — это последовательность символов, определяющая шаблон поиска.».Что мы будем делать с этим шаблоном поиска, зависит от нас.

E.g.

  • Проверьте форматирование адреса электронной почты.
## Basic email validation
/.+\@.+\..+/
  • Найдите определенную строку символов в большом блоке текста.
/orange/
  • Исключить специальные символы из строки
/!@#$%+/

Символы, используемые в регулярных выражениях, также можно разделить на строковые литералы, классы символов, квантификаторы и захваты. Я не буду вдаваться в подробности о них, но вы можете прочитать о них здесь.

Базовая шпаргалка по регулярным выражениям

Больше всего в понимании регулярных выражений мне помог удобный список символов, которые обычно используются при создании шаблонов поиска.

## Symbols
. - Matches any single character, excluding line breaks.
* - Matches the preceding expression 0 or more times.
+ - Matches the preceding expression 1 or more times.
? - The preceding expression is optional, in other words 0 or 1   
    times.
^ - Matches the beginning of the string
$ - Matches the end of the string
## Character groups
\d     - Matches any single digit character
\w     - Matches any word character (alphanumeric and underscore)
[XYZ]  - Character set that matches any single character within the
         brackets. Ranges like [A-Z] are also accepted.
[XYZ]+ - Same as above but matches one or more times
[^A-Z] - The ^ means negate. Here it will match anything that is not 
         an uppercase letter.
## Flags
g - Global match. Finds all matches in addition to the first
i - Ignore case. Matches all uppercase and lowercase characters

Ищете больше? Взгляните на полный синтаксис регулярных выражений.

Применение на практике…

Давайте возьмем один из примеров выше и разберем его.

def valid_email?(email)
  email.match?(/.+\@.+\..+/)
end
valid_email?("[email protected]")
=> true

Это очень простое выражение проверки электронной почты. На самом деле это настолько просто, что вы можете не захотеть использовать его для проверки электронной почты на действующем веб-сайте. Но для учебных целей, это должно быть сделано.

Начальный и конечный / в методе match? говорят ruby, что мы используем регулярное выражение. Первый . говорит "Привет, я сопоставлю любой одиночный символ, кроме разрывов строк". В паре с + он говорит "Здравствуйте, точка, я помогу вам сопоставить все, что предшествовало мне, один или несколько раз!»

Следующие два символа \@ будут соответствовать одному символу, @ . Помните \w в шпаргалке? Если бы мы заменили @ на # , выражение потребовало бы, чтобы мы использовали адрес электронной почты, который выглядел бы так test#testing.com . За этим следует еще одна комбинация .+, затем еще один символ соответствует \.. После этого последняя .+ комбинация.

Собрав все это вместе, мы получим выражение, которое будет возвращать true всякий раз, когда мы передаем строку, похожую на [email protected]. Довольно круто, верно?

Дополнительные ресурсы

Хотя мир регулярных выражений может показаться обширным и глубоким, он не лишен хорошей документации и сторонних инструментов. Ниже приведены несколько дополнительных ресурсов и инструментов, которые могут оказаться полезными в вашем стремлении укротить регулярные выражения. Хорошей охоты!