В этом уроке мы рассмотрим, как с помощью регулярных выражений можно находить похожие сочетания символов.
Представим, что нам нужно найти любую из двух подстрок: gray или grow. Воспользуемся механизмом, который называется альтернатива — укажем первый возможный вариант и через вертикальную черточку — второй. Так мы получим следующее сопоставление:
/gray|grow/
gray grow grey
Это же условие можно записать немного короче. Поскольку у этих подстрок есть общая часть, укажем символы gr и дальше, используя группировку, добавим альтернативу:
/gr(ay|ow)/
gray grow grey
Здесь очень важна группировка. Если мы ее уберем, альтернативой gray станет ow:
/gray|ow/
gray grow grey
Ниже еще один пример использования альтернативы. В английском языке есть слово gray/grey. Оно звучит одинаково, но в британском и американском вариантах пишется по-разному. Чтобы не упустить в тексте ни один из вариантов, мы можем использовать лаконичную альтернативу:
/gr(a|e)y/
gray grow grey
Еще мы можем упростить получившееся выражение, поскольку в альтернативе используются одиночные символы. Укажем символьный класс, который состоит из символов a и e:
/gr[ae]y/
gray grow grey
В этом случае механизм сопоставления намного эффективнее работает с символьными классами, тем более — одиночными.
Символьный класс и альтернатива
В регулярных выражениях символьные классы обычно работают быстрее, чем альтернатива, особенно когда речь идет о простых случаях. Вот почему:
- Простота: Символьный класс позволяет проверить один символ сразу, а альтернатива требует проверять каждый вариант по отдельности, что занимает больше времени.
- Оптимизация: Многие программы, которые обрабатывают регулярные выражения, лучше справляются с символьными классами, так как они могут быстро определить, есть ли символ в классе. Альтернатива требует больше шагов, чтобы проверить каждый вариант.
- Сложность: Если много альтернатив, это может замедлить процесс, потому что программа должна проверять каждую из них по очереди.
Если можно использовать символьный класс, это будет быстрее, чем использовать альтернативу. Альтернатива полезна в тех случаях, когда нужно искать разные строки или шаблоны, которые не могут быть объединены в символьный класс. Например, если нужно найти "cat" или "dog", то используем cat|dog.
/cat|dog/
cat and dog are pets.
Альтернатива позволяет комбинировать более сложные выражения. Например, можно использовать a|b|c\d для поиска "a", "b" или "c" с последующей цифрой.
/(a|b|c\d)/
Choose a, b, or c3 for your answer.
Альтернатива дает больше возможностей для создания сложных регулярных выражений, когда нужно учитывать разные варианты, которые не могут быть выражены через символьные классы.
/([a-zA-Z0-9._%+-]+@(gmail\.com|yahoo\.com|hotmail\.com))/
Contact me at user@gmail.com, example@yahoo.com, or test@hotmail.com.
Таким образом, альтернатива нужна для более сложных случаев, когда нужно искать разные строки или шаблоны, которые не могут быть объединены в один класс символов.
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.