HTML Diff
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: &lt; and &gt;. 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: &lt; and &gt;. Here we put a character inside:</p>
3 <p>/&lt;.*&gt;/</p>
3 <p>/&lt;.*&gt;/</p>
4 <p>&lt;a href="https://www.yahoo.com"&gt;google&lt;/a&gt;</p>
4 <p>&lt;a href="https://www.yahoo.com"&gt;google&lt;/a&gt;</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 &lt; and &gt; 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 &lt; and &gt; 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>/&lt;[^&gt;]*&gt;/</p>
8 <p>/&lt;[^&gt;]*&gt;/</p>
9 <p>&lt;a href="https://www.yahoo.com"&gt;google&lt;/a&gt;</p>
9 <p>&lt;a href="https://www.yahoo.com"&gt;google&lt;/a&gt;</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>/&lt;.*?&gt;/</p>
12 <p>/&lt;.*?&gt;/</p>
13 <p>&lt;a href="https://www.yahoo.com"&gt;google&lt;/a&gt;</p>
13 <p>&lt;a href="https://www.yahoo.com"&gt;google&lt;/a&gt;</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>/&lt;.?&gt;/</p>
15 <p>/&lt;.?&gt;/</p>
16 <p>&lt;p&gt;&lt;a href="<a>www.yahoo.com</a>"&gt;google&lt;/a&gt;&lt;/p&gt;</p>
16 <p>&lt;p&gt;&lt;a href="<a>www.yahoo.com</a>"&gt;google&lt;/a&gt;&lt;/p&gt;</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>