正则表达式仅在提供锚点时返回值

时间:2015-03-10 21:27:48

标签: c# regex

我使用以下模式匹配字符串中的数字。我知道在我尝试匹配的字符串中只有一个数字。

var str = "Store # 100";
var regex = new Regex(@"[0-9]*");

当我调用regex.Match.Value时,会返回一个空字符串。但是,如果我将其更改为:

var regex = new Regex(@"[0-9]*$");

它确实返回了我想要的值。是什么给了什么?

2 个答案:

答案 0 :(得分:1)

好的我明白了。

问题[0-9]*或让问题更简单:\d* *使其可选,因此它也会导致零' 100'之前每个字符的长度匹配。

要解决此问题,您可以使用\d\d*,这将在其余部分之前至少产生一个强制数字,并清除零长度匹配。

编辑:美元版本,例如只有当您的号码位于输入字符串的末尾时,\d*$才会起作用。

More information here!

Aaaaand One more link for yet even more info(什么时候活着)。

答案 1 :(得分:1)

根据MSDN

  

量词*,+和{n,m}及其懒惰的对应物永远不会   在最小捕获次数有空匹配后重复   被发现了。此规则可防止量词进入无限   空子表达式上的循环匹配时的最大数量   可能的群体捕获是无限的或接近无限的。

因此,当最小捕获数为零时,[0-9]*模式返回如此多的NULL。并且[0-9]+会毫无问题地捕获100