0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы познакомимся с понятиями жадной и ленивой квантификации.</p>
1
<p>В этом уроке мы познакомимся с понятиями жадной и ленивой квантификации.</p>
2
<p>Давайте напишем регулярное выражение, которое подсветит все теги в нашей строке. Для этого укажем открывающие и закрывающие знаки тега: < и >. Внутри пусть будет любой символ:</p>
2
<p>Давайте напишем регулярное выражение, которое подсветит все теги в нашей строке. Для этого укажем открывающие и закрывающие знаки тега: < и >. Внутри пусть будет любой символ:</p>
3
<p>/<.*>/</p>
3
<p>/<.*>/</p>
4
<p><a href="https://www.yandex.ru">google</a></p>
4
<p><a href="https://www.yandex.ru">google</a></p>
5
<p>В строке есть два тега - открывающий и закрывающий. Несмотря на это, в результате сопоставилась вся строка. Такое поведение называется<strong>жадным</strong>. Это значит, что квантификатор повторяется столько раз, сколько это возможно. По умолчанию в регулярных выражениях квантификация жадная, поэтому мы захватываем<strong>максимальную подстроку</strong>. Вся строка соответствует нашему регулярному выражению - все внутри < и > считается содержимым тега.</p>
5
<p>В строке есть два тега - открывающий и закрывающий. Несмотря на это, в результате сопоставилась вся строка. Такое поведение называется<strong>жадным</strong>. Это значит, что квантификатор повторяется столько раз, сколько это возможно. По умолчанию в регулярных выражениях квантификация жадная, поэтому мы захватываем<strong>максимальную подстроку</strong>. Вся строка соответствует нашему регулярному выражению - все внутри < и > считается содержимым тега.</p>
6
<p>Попробуем избежать жадного поведения, вместо любого символа внутри тега мы можем задать любой символ, за исключением закрывающего. И тогда сопоставляются два тега отдельно:</p>
6
<p>Попробуем избежать жадного поведения, вместо любого символа внутри тега мы можем задать любой символ, за исключением закрывающего. И тогда сопоставляются два тега отдельно:</p>
7
<p>/<[^>]*>/</p>
7
<p>/<[^>]*>/</p>
8
<p><a href="https://www.yandex.ru">google</a></p>
8
<p><a href="https://www.yandex.ru">google</a></p>
9
<p>Несмотря на эффективность такого решения, это лишь уход от проблемы. Так можно избежать последствий жадного поведения, но не его самого.</p>
9
<p>Несмотря на эффективность такого решения, это лишь уход от проблемы. Так можно избежать последствий жадного поведения, но не его самого.</p>
10
<p>В противоположность жадной квантификации существует ленивая. В ленивой мы захватываем<strong>минимальную подстроку</strong>. Чтобы из жадной квантификации сделать ленивую, нужно использовать специальный символ ?:</p>
10
<p>В противоположность жадной квантификации существует ленивая. В ленивой мы захватываем<strong>минимальную подстроку</strong>. Чтобы из жадной квантификации сделать ленивую, нужно использовать специальный символ ?:</p>
11
<p>/<.*?>/</p>
11
<p>/<.*?>/</p>
12
<p><a href="https://www.yandex.ru">google</a></p>
12
<p><a href="https://www.yandex.ru">google</a></p>
13
<p>Не забывайте, что в регулярных выражениях многие специальные символы ведут себя по-разному, в зависимости от того, где они стоят. Если бы ? располагался после точки, то он рассматривался бы просто как квантификатор "ни одного символа, либо один символ":</p>
13
<p>Не забывайте, что в регулярных выражениях многие специальные символы ведут себя по-разному, в зависимости от того, где они стоят. Если бы ? располагался после точки, то он рассматривался бы просто как квантификатор "ни одного символа, либо один символ":</p>
14
<p>/<.?>/</p>
14
<p>/<.?>/</p>
15
<p><p><a href="<a>https://yandex.ru</a>">google</a></p></p>
15
<p><p><a href="<a>https://yandex.ru</a>">google</a></p></p>
16
<p>При этом когда ? идет сразу после квантификатора, он рассматривается как специальный символ, который из жадных квантификаторов делает ленивые.</p>
16
<p>При этом когда ? идет сразу после квантификатора, он рассматривается как специальный символ, который из жадных квантификаторов делает ленивые.</p>