HTML Diff
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>