0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы рассмотрим, как с помощью регулярных выражений можно находить похожие сочетания символов.</p>
1
<p>В этом уроке мы рассмотрим, как с помощью регулярных выражений можно находить похожие сочетания символов.</p>
2
<p>Представим, что нам нужно найти любую из двух подстрок: gray или grow. Воспользуемся механизмом, который называется<strong>альтернатива</strong>- укажем первый возможный вариант и через вертикальную черточку - второй. Так мы получим следующее сопоставление:</p>
2
<p>Представим, что нам нужно найти любую из двух подстрок: gray или grow. Воспользуемся механизмом, который называется<strong>альтернатива</strong>- укажем первый возможный вариант и через вертикальную черточку - второй. Так мы получим следующее сопоставление:</p>
3
<p>/gray|grow/</p>
3
<p>/gray|grow/</p>
4
<p>gray grow grey</p>
4
<p>gray grow grey</p>
5
<p>Это же условие можно записать немного короче. Поскольку у этих подстрок есть общая часть, укажем символы gr и дальше, используя группировку, добавим альтернативу:</p>
5
<p>Это же условие можно записать немного короче. Поскольку у этих подстрок есть общая часть, укажем символы gr и дальше, используя группировку, добавим альтернативу:</p>
6
<p>/gr(ay|ow)/</p>
6
<p>/gr(ay|ow)/</p>
7
<p>gray grow grey</p>
7
<p>gray grow grey</p>
8
<p>Здесь очень важна группировка. Если мы ее уберем, альтернативой gray станет ow:</p>
8
<p>Здесь очень важна группировка. Если мы ее уберем, альтернативой gray станет ow:</p>
9
<p>/gray|ow/</p>
9
<p>/gray|ow/</p>
10
<p>gray grow grey</p>
10
<p>gray grow grey</p>
11
<p>Ниже еще один пример использования альтернативы. В английском языке есть слово gray/grey. Оно звучит одинаково, но в британском и американском вариантах пишется по-разному. Чтобы не упустить в тексте ни один из вариантов, мы можем использовать лаконичную альтернативу:</p>
11
<p>Ниже еще один пример использования альтернативы. В английском языке есть слово gray/grey. Оно звучит одинаково, но в британском и американском вариантах пишется по-разному. Чтобы не упустить в тексте ни один из вариантов, мы можем использовать лаконичную альтернативу:</p>
12
<p>/gr(a|e)y/</p>
12
<p>/gr(a|e)y/</p>
13
<p>gray grow grey</p>
13
<p>gray grow grey</p>
14
<p>Еще мы можем упростить получившееся выражение, поскольку в альтернативе используются одиночные символы. Укажем символьный класс, который состоит из символов a и e:</p>
14
<p>Еще мы можем упростить получившееся выражение, поскольку в альтернативе используются одиночные символы. Укажем символьный класс, который состоит из символов a и e:</p>
15
<p>/gr[ae]y/</p>
15
<p>/gr[ae]y/</p>
16
<p>gray grow grey</p>
16
<p>gray grow grey</p>
17
<p>В этом случае механизм сопоставления намного эффективнее работает с символьными классами, тем более - одиночными.</p>
17
<p>В этом случае механизм сопоставления намного эффективнее работает с символьными классами, тем более - одиночными.</p>
18
<h2>Символьный класс и альтернатива</h2>
18
<h2>Символьный класс и альтернатива</h2>
19
<p>В регулярных выражениях символьные классы обычно работают быстрее, чем альтернатива, особенно когда речь идет о простых случаях. Вот почему:</p>
19
<p>В регулярных выражениях символьные классы обычно работают быстрее, чем альтернатива, особенно когда речь идет о простых случаях. Вот почему:</p>
20
<ul><li><strong>Простота</strong>: Символьный класс позволяет проверить один символ сразу, а альтернатива требует проверять каждый вариант по отдельности, что занимает больше времени.</li>
20
<ul><li><strong>Простота</strong>: Символьный класс позволяет проверить один символ сразу, а альтернатива требует проверять каждый вариант по отдельности, что занимает больше времени.</li>
21
<li><strong>Оптимизация</strong>: Многие программы, которые обрабатывают регулярные выражения, лучше справляются с символьными классами, так как они могут быстро определить, есть ли символ в классе. Альтернатива требует больше шагов, чтобы проверить каждый вариант.</li>
21
<li><strong>Оптимизация</strong>: Многие программы, которые обрабатывают регулярные выражения, лучше справляются с символьными классами, так как они могут быстро определить, есть ли символ в классе. Альтернатива требует больше шагов, чтобы проверить каждый вариант.</li>
22
<li><strong>Сложность</strong>: Если много альтернатив, это может замедлить процесс, потому что программа должна проверять каждую из них по очереди.</li>
22
<li><strong>Сложность</strong>: Если много альтернатив, это может замедлить процесс, потому что программа должна проверять каждую из них по очереди.</li>
23
</ul><p>Если можно использовать символьный класс, это будет быстрее, чем использовать альтернативу. Альтернатива полезна в тех случаях, когда нужно искать разные строки или шаблоны, которые не могут быть объединены в символьный класс. Например, если нужно найти "cat" или "dog", то используем cat|dog.</p>
23
</ul><p>Если можно использовать символьный класс, это будет быстрее, чем использовать альтернативу. Альтернатива полезна в тех случаях, когда нужно искать разные строки или шаблоны, которые не могут быть объединены в символьный класс. Например, если нужно найти "cat" или "dog", то используем cat|dog.</p>
24
<p>/cat|dog/</p>
24
<p>/cat|dog/</p>
25
<p>cat and dog are pets.</p>
25
<p>cat and dog are pets.</p>
26
<p>Альтернатива позволяет комбинировать более сложные выражения. Например, можно использовать a|b|c\d для поиска "a", "b" или "c" с последующей цифрой.</p>
26
<p>Альтернатива позволяет комбинировать более сложные выражения. Например, можно использовать a|b|c\d для поиска "a", "b" или "c" с последующей цифрой.</p>
27
<p>/(a|b|c\d)/</p>
27
<p>/(a|b|c\d)/</p>
28
<p>Choose a, b, or c3 for your answer.</p>
28
<p>Choose a, b, or c3 for your answer.</p>
29
<p>Альтернатива дает больше возможностей для создания сложных регулярных выражений, когда нужно учитывать разные варианты, которые не могут быть выражены через символьные классы.</p>
29
<p>Альтернатива дает больше возможностей для создания сложных регулярных выражений, когда нужно учитывать разные варианты, которые не могут быть выражены через символьные классы.</p>
30
<p>/([a-zA-Z0-9._%+-]+@(gmail\.com|yahoo\.com|hotmail\.com))/</p>
30
<p>/([a-zA-Z0-9._%+-]+@(gmail\.com|yahoo\.com|hotmail\.com))/</p>
31
<p>Contact me at user@gmail.com, example@yahoo.com, or test@hotmail.com.</p>
31
<p>Contact me at user@gmail.com, example@yahoo.com, or test@hotmail.com.</p>
32
<p>Таким образом, альтернатива нужна для более сложных случаев, когда нужно искать разные строки или шаблоны, которые не могут быть объединены в один класс символов.</p>
32
<p>Таким образом, альтернатива нужна для более сложных случаев, когда нужно искать разные строки или шаблоны, которые не могут быть объединены в один класс символов.</p>