<?xml version="1.0" encoding="windows-1252"?>
<node id="967" title="Quantifiers in regular expressions" created="1999-11-10 00:58:58" updated="2005-08-15 16:11:52">
<type id="956">
perltutorial</type>
<author id="113">
root</author>
<data>
<field name="doctext">
Another useful thing would be able to match a certain number of characters that matched a certain criteria.  
There are two types of searches you can do when you're dealing with quantifiers: greedy or nongreedy, or in 
other terms maximal, and minimal. A maximal or greedy search tries to match as many characters as it can
 while still returning a true value.  So if we were looking for 1 to 4 b's in a row and had
a string with 3 b's in a row we would match the 3 b's.  If it was a minimal or nongreedy search only 
the first b would be matched.&lt;BR&gt;
&lt;BR&gt;
Here's a table that sums up quantifiers.&lt;BR&gt;
&lt;BR&gt;
&lt;TABLE border=1&gt;
&lt;TR&gt;&lt;TD&gt;&lt;B&gt;Greedy&lt;/B&gt;&lt;/TD&gt;&lt;TD&gt;&lt;B&gt;Nongreedy&lt;/B&gt;&lt;/TD&gt;&lt;TD&gt;&lt;B&gt;Allowed numbers for a match&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;&lt;TD&gt;?&lt;/TD&gt;&lt;TD&gt;??&lt;/TD&gt;&lt;TD&gt;0 or 1 time&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;&lt;TD&gt;+&lt;/TD&gt;&lt;TD&gt;+?&lt;/TD&gt;&lt;TD&gt;1 or more times&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;&lt;TD&gt;*&lt;/TD&gt;&lt;TD&gt;*?&lt;/TD&gt;&lt;TD&gt;0 or more times&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;&lt;TD&gt;{i}&lt;/TD&gt;&lt;TD&gt;{i}?&lt;/TD&gt;&lt;TD&gt;exactly i times&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;&lt;TD&gt;{i,}&lt;/TD&gt;&lt;TD&gt;{i,}?&lt;/TD&gt;&lt;TD&gt;i or more times&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;&lt;TD&gt;{i,j}&lt;/TD&gt;&lt;TD&gt;{i,j}?&lt;/TD&gt;&lt;TD&gt;at lease i times and at most j times&lt;/TD&gt;&lt;/TR&gt;
&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;
Obviously Perl needs to know what these quantifiers are referring to.  The quantifier is associated with the 
character directly to its left unless parentheses are used for grouping.&lt;BR&gt;
&lt;BR&gt;
&lt;PRE&gt;&lt;CODE&gt;
/b{3}/     #matches three b's
/(ha){3}/  #matches hahaha
&lt;/CODE&gt;&lt;/PRE&gt;
Onto [Character Class Abbreviations]
&lt;BR&gt;</field>
</data>
</node>
