正则表达式给出了两个类似案例的不同结果

时间:2011-11-19 09:44:44

标签: c# regex

我有以下字符串:

  

消息1 [V.Variable1]消息2 [F.Field1]消息3

为什么它在ex1中运行良好而在ex2中不运行?

var ex1 = Regex.Matches(message, @"\[F\.(?<name>.+)\]"); 
// the result `{[F.Field1]}` .. as expected


var ex2 = Regex.Matches(message, @"\[V\.(?<name>.+)\]");
// the result `{[V.Variable1] Message 2 [F.Field1]}` .. not as expected

当我尝试获取组name的值时,它会在ex1中给出预期结果Field1但在ex2中没有返回任何内容

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

你必须使.+懒惰:\[V\.(?<name>.+?)\]"(注意问号)。第二种情况不起作用,因为默认情况下+符号是贪婪的,并且它会尽可能多地与第二组中的第二个右方括号匹配。