【问题标题】:Javascript RegEx to c# RegExJavascript RegEx 到 c# RegEx
【发布时间】:2015-09-05 10:34:20
【问题描述】:

我一直在尝试对 c# 和 javascript 使用以下 RegEx。它适用于 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#。请帮助我理解这个正则表达式的作用。我对正则表达式很陌生,所以不能真正理解为什么这个特殊的正则表达式适用于

【问题讨论】:

  • 我认为 c# 模式不需要分隔符。
  • 请指正好吗。

标签: javascript c# regex


【解决方案1】:

使用类构造函数创建模式。 (我对 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/等等。

【讨论】:

  • 你能告诉我做 bool test = Regex.IsMatch(strName,strMacRegEx,RegexOptions.IgnoreCase); 有什么问题吗? .我用你的测试过它就像一个魅力。但是当我尝试不使用类构造函数时它会中断。请帮忙。
【解决方案2】:

删除外部/ 和不区分大小写的修饰符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 次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多