2015-09-05 2 views
-1

Я пытаюсь использовать следующий RegEx для C# и javascript. Он отлично работает для javascript, но не для C#.Javascript RegEx to C# RegEx

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 

Может кто-нибудь, пожалуйста, помогите мне, как сделать выше REGEX работы на 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 test = Regex.IsMatch (strName, strMacRegEx, RegexOptions.IgnoreCase); , Я тестировал с твоим, это работает как шарм. Но когда я пытался без использования конструктора классов, он ломался. Пожалуйста помоги . – Kenta