C#正則表達式引擎貪婪特性
作者:佚名
本文介紹C#正則表達式引擎貪婪特性,只要模式允許,它將匹配盡可能多的字符,以及介紹由于C#正則表達式引擎的貪婪特性,導(dǎo)致它在某些情況下,將進行回溯以獲得匹配。
C#正則表達式引擎貪婪特性,只要模式允許,它將匹配盡可能多的字符。通過在“重復(fù)描述字符”(*,+)后面添加“?”,可以將匹配模式改成非貪婪。請看以下示例:
- Code
- string x = "Live for nothing,die for something";
- Regex r1 = new Regex(@".*thing");
- if (r1.IsMatch(x))
- {
- Console.WriteLine("match:" + r1.Match(x).Value);
- //輸出:Live for nothing,die for something
- }
- Regex r2 = new Regex(@".*?thing");
- if (r2.IsMatch(x))
- {
- Console.WriteLine("match:" + r2.Match(x).Value);
- //輸出:Live for nothing
- }
使用“(?>…)”方式進行非回溯聲明。由于C#正則表達式引擎的貪婪特性,導(dǎo)致它在某些情況下,將進行回溯以獲得匹配,請看下面的示例:
- Code
- string x = "Live for nothing,die for something";
- Regex r1 = new Regex(@".*thing,");
- if (r1.IsMatch(x))
- {
- Console.WriteLine("match:" + r1.Match(x).Value);
- //輸出:Live for nothing,
- }
- Regex r2 = new Regex(@"(?>.*)thing,");
- if (r2.IsMatch(x))//不匹配
- {
- Console.WriteLine("match:" + r2.Match(x).Value);
- }
在r1中,“.*”由于其貪婪特性,將一直匹配到字符串的***,隨后匹配“thing”,但在匹配“,”時失敗,此時引擎將回溯,并在“thing,”處匹配成功。
在r2中,由于強制非回溯,所以整個表達式匹配失敗。以上介紹C#正則表達式引擎的貪婪特性。
【編輯推薦】
責(zé)任編輯:佚名
來源:
百度空間