By default, quantifiers are greedy, not lazy.
A greedy quantifier repeats as many times as it can before proceeding.
A lazy quantifier repeats as few times as it can before proceeding.
You can make any quantifier lazy by suffixing it with the ? symbol.
To illustrate the difference, consider the following HTML fragment:
string html = "<i>This</i> is a<i>test</i> case";
Suppose we want to extract the two phrases in italics.
If we execute the following:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string html = "<i>This</i> is a<i>test</i> case";
foreach (Match m in Regex.Matches (html, @"<i>.*</i>"))
Console.WriteLine (m);
}
}
The output:
This is atest
The result is not two matches, but a single match, as follows:
string html = "<i>This</i> is a<i>test</i> case";
* quantifier greedily repeats as many times as it can before matching </i>.
Make the quantifier lazy:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string html = "<i>This</i> is a<i>test</i> case";
foreach (Match m in Regex.Matches (html, @"<i>.*?</i>"))
Console.WriteLine (m);
}
}
The output:
Thistest
java2s.com | Contact Us | Privacy Policy |
Copyright 2009 - 12 Demo Source and Support. All rights reserved. |
All other trademarks are property of their respective owners. |