会员
周边
众包
新闻
博问
闪存
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
Ken-Cai
博客园
首页
新随笔
联系
订阅
管理
(8)正则表达式 回溯与非回溯
使用“(?>…)”方式进行非回溯声明。由于正则表达式引擎的贪婪特性,导致它在某些情况下,将进行回溯以获得匹配,请看下面的示例:
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中,由于强制非回溯,所以整个表达式匹配失败。
posted @
2011-03-08 15:07
Ken-Cai
阅读(
267
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
公告