2015-09-05 138 views
-1

我一直在尝试为c#和javascript使用以下正则表达式。它的JavaScript工作正常,但不适用于C#。Javascript正则表达式到c#正则表达式

C#代码

using System.IO; 
using System; 
using System.Text.RegularExpressions; 
class Program 
{ 
    static void Main() 
    { 
     string strMacRegEx = @"/(?=.*\d)(?=.*[a-f])[\da-f]{12}/i"; 
     string strName = "944a0c112129"; 
     bool test = Regex.IsMatch(strName,strMacRegEx); 
     if(test) 
     { 
     Console.WriteLine("Pass"); 
     } 
     else 
     { 
     Console.WriteLine("Fail"); // Returns Fail 
     } 

    } 
} 

Javascript代码

var test = /(?=.*\d)(?=.*[a-f])[\da-f]{12}/i; 
alert(test .test('944A0C112129'));//Returns true 

任何人可以帮我如何为C#上述正则表达式的工作了。请帮我理解这个正则表达式会做什么。我对正则表达式很陌生,所以无法真正理解为什么这个特定的正则表达式是为了

+0

我不认为c#模式需要分隔符。 – hjpotter92

+0

你可以请给一个正确的。 – Kenta

回答

1

删除外部/和不区分大小写的修饰符i。您可以使用RegexOptions.IgnoreCase作为第三个参数来获得不区分大小写的匹配。

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string strMacRegEx = @"(?=.*\d)(?=.*[a-f])[\da-f]{12}"; 
     string strName = "944a0c112129"; 
     bool test = Regex.IsMatch(strName, strMacRegEx, RegexOptions.IgnoreCase); 
     if (test) 
     { 
      Console.WriteLine("Pass"); 
     } 
     else 
     { 
      Console.WriteLine("Fail"); // Returns Fail 
     } 
    } 
} 

你可以看看到msdn quick reference进行了详细的正则表达式的解释。

你的正则表达式包含两个“超前断言”。 (我认为你可以为你的测试用例删除它们。)有趣的是[\da-f]{12}。 [\ da-f]表示:匹配任何十进制数字或从a到f的任何字符。{12}表示:匹配数字或字符正好12次。

2

使用类构造函数创建模式。 (我很熟悉C#)

string pattern = @"(?=.*\d)(?=.*[a-f])[\da-f]{12}"; 
RegexOptions options = RegexOptions.IgnoreCase; 
Regex myPattern = new Regex(pattern, options); 

后来,检查使用IsMatch如下:

myPattern.IsMatch("944a0c112129"); 

至于什么样的模式是做解释,你可以使用多种在线模式分析仪,如https://www.debuggex.com/https://regex101.com/http://regexper.com/等。

+0

你能告诉我在做bool测试时出了什么问题= Regex.IsMatch(strName,strMacRegEx,RegexOptions.IgnoreCase); 。我已经测试过它的魅力。但是,当我尝试没有使用类构造函数它打破。请帮忙 。 – Kenta

相关问题