0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p>In this lesson, we will observe greedy and lazy quantification.</p>
1
<p>In this lesson, we will observe greedy and lazy quantification.</p>
2
<p>We will start by writing a regular expression highlighting all the tags in our string. To do it, we should enter the opening and closing tag brackets: < and >. Here we put a character inside:</p>
2
<p>We will start by writing a regular expression highlighting all the tags in our string. To do it, we should enter the opening and closing tag brackets: < and >. Here we put a character inside:</p>
3
<p>/<.*>/</p>
3
<p>/<.*>/</p>
4
<p><a href="https://www.yahoo.com">google</a></p>
4
<p><a href="https://www.yahoo.com">google</a></p>
5
<p>There are two tags in the string - opening and closing. Although, we found a match for the whole string. Programmers call this behavior<strong>greedy</strong>. It means that the quantifier repeats as many times as possible.</p>
5
<p>There are two tags in the string - opening and closing. Although, we found a match for the whole string. Programmers call this behavior<strong>greedy</strong>. It means that the quantifier repeats as many times as possible.</p>
6
<p>In regular expressions, quantification is greedy by default, so we have captured the longest possible substring. The entire string corresponds to our regular expression; everything inside < and > counts as tag content.</p>
6
<p>In regular expressions, quantification is greedy by default, so we have captured the longest possible substring. The entire string corresponds to our regular expression; everything inside < and > counts as tag content.</p>
7
<p>To avoid greedy behavior, we can specify any character inside the tag instead of any character (except the closing one). In that case, we will process the two tags separately:</p>
7
<p>To avoid greedy behavior, we can specify any character inside the tag instead of any character (except the closing one). In that case, we will process the two tags separately:</p>
8
<p>/<[^>]*>/</p>
8
<p>/<[^>]*>/</p>
9
<p><a href="https://www.yahoo.com">google</a></p>
9
<p><a href="https://www.yahoo.com">google</a></p>
10
<p>Despite the effectiveness of such a solution, it is only an escape from the problem. That way, we can avoid the consequences of greedy behavior but not the behavior itself.</p>
10
<p>Despite the effectiveness of such a solution, it is only an escape from the problem. That way, we can avoid the consequences of greedy behavior but not the behavior itself.</p>
11
<p>To turn a greedy quantization into a lazy one, you have to use a special symbol ?:</p>
11
<p>To turn a greedy quantization into a lazy one, you have to use a special symbol ?:</p>
12
<p>/<.*?>/</p>
12
<p>/<.*?>/</p>
13
<p><a href="https://www.yahoo.com">google</a></p>
13
<p><a href="https://www.yahoo.com">google</a></p>
14
<p>We should remember that many special characters behave differently in regular expressions, depending on the place where they are. If ? were placed after the dot, it would be treated simply as a "no character or one character" quantifier:</p>
14
<p>We should remember that many special characters behave differently in regular expressions, depending on the place where they are. If ? were placed after the dot, it would be treated simply as a "no character or one character" quantifier:</p>
15
<p>/<.?>/</p>
15
<p>/<.?>/</p>
16
<p><p><a href="<a>www.yahoo.com</a>">google</a></p></p>
16
<p><p><a href="<a>www.yahoo.com</a>">google</a></p></p>
17
<p>But when ? comes right after a quantifier, it's treated by regex as a special character that turns greedy quantifiers into lazy ones.</p>
17
<p>But when ? comes right after a quantifier, it's treated by regex as a special character that turns greedy quantifiers into lazy ones.</p>