2012-01-22 265 views
1

好吧,这真的很奇怪。我有以下简单的regex搜索模式奇怪的正则表达式(正则表达式)匹配!不匹配数字

\d* 

遗憾的是它不

*-7d 

匹配 “7” 但是当我测试了以下的正则表达式搜索模式

xx 

它匹配器“xx”in

asdxxasd 

完全奇怪! 顺便说一句,我使用正常的C#正则表达式对象。 虽然预先感谢任何帮助!

对不起,我的代码如下:

public static string FindFirstRegex(string input,string pattern) 
{ 
    try 
    { 
     Regex _regex = new Regex(@pattern); 
     Match match = _regex.Match(input.ToLower()); 
     if (match.Success) 
     { 
      return match.Groups[0].Value; 
     } 
     else 
     { 
      return null; 
     } 
    } 
    catch 
    { 
     return ""; 
    } 
} 

我所说的功能如下:

MessageBox.Show(utilities.FindFirstRegex("asdxxasd", "xx")); 
MessageBox.Show(utilities.FindFirstRegex("ss327d", "\\d*")); 
+4

请张贴演示问题的一些代码。 –

+0

借调奥利查尔斯沃思,但是你可能忘记在C#正则表达式字符串中逃避你的反斜杠? –

回答

5

您的正则表达式匹配0个或多个数字。它开始查看您的模式,并且由于第一个字符是非数字,因此它匹配零数字。

如果你使用+而不是*,你会强制它从一个数字开始,然后(贪婪地)得到其余的数字。

3

那是因为你使用*量词,所以\d*指数字,任意数量的重复。在.NET实现中,此输入*-7d的正则表达式将返回5个匹配项:empty string,empty string,7,empty stringempty string。使用+量词而不是*,即:\d+

+0

谢谢。但为什么它返回一个null? – user1034912

+0

@ user1034912,因为即使是空字符串也会匹配'\ d *' –

+0

,所以这对于正则表达式来说是一个.NET限制? – user1034912