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