2015-09-05 139 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

相關問題