Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MDX正则表达式解析错误_C#_Regex - Fatal编程技术网

C# MDX正则表达式解析错误

C# MDX正则表达式解析错误,c#,regex,C#,Regex,我可能会因为问这个问题而被烧死,但我一辈子都不明白为什么在VisualStudio中调试这段代码时会抛出这个异常。我已经为此正则表达式测试了CLR VB实现,它返回了预期的表结果: MDX String Index Length [Measures].[Product-To-Order %] 8 31 [Measures].[Gross Reven

我可能会因为问这个问题而被烧死,但我一辈子都不明白为什么在VisualStudio中调试这段代码时会抛出这个异常。我已经为此正则表达式测试了CLR VB实现,它返回了预期的表结果:

MDX String                                              Index  Length
[Measures].[Product-To-Order %]                         8      31
[Measures].[Gross Revenue (Stable)]                     40     35
[Measures].[Product Count]                              76     26
[Measures].[Total Order Count]                          103    30
[Measures].[Average SKU Discount]                       134    33
[Measures].[Average SKU Price Per Purchased Item]       168    49
[Component SKU].[Component SKU by Master Class].[All]   333    53
[Component SKU].[Component SKU by Master Class].[All]   690    53
[XL_Filter_Set_0]                                       749    17
[XL_Filter_Set_0]                                       806    17
[XL_Filter_HelperSet_0]                                 835    23
[XL_Filter_HelperSet_0]                                 887    23
...
Visual Studio似乎表明存在未处理的异常。C#实施:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Data.Sql;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Collections;

public static class RegExFunctions {

    // RegEx matches
    [SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true, Name = "RegExMatches",
        SystemDataAccess = SystemDataAccessKind.None, FillRowMethodName = "RegExMatchesRow")]
    public static IEnumerable RegExMatches(SqlString input, SqlString pattern, SqlInt32 options)
    {
        try
        {
            if (input.IsNull || pattern.IsNull) return null;
            Console.WriteLine(input);
            Console.WriteLine(pattern);
            IEnumerable matches = Regex.Matches(input.Value, pattern.Value, (RegexOptions)options.Value);
            Console.WriteLine(matches);
            //return matches;
            return Regex.Matches(input.Value, pattern.Value, (RegexOptions)options.Value);
        }
        catch (RegexMatchTimeoutException)
        {
            // Do nothing. Assume that a timeout represents no match.
            return null;
        }
    }

    public static int Main()
    {
        IEnumerable result =
            RegExMatches(
                @"\[[^\]]*\](\.(&)?\[[^\]]*\])*",
                @"SELECT {[Measures].[Product-To-Order %],[Measures].[Gross Revenue (Stable)],[Measures].[Product Count],[Measures].[Total Order Count],[Measures].[Average SKU Discount],[Measures].[Average SKU Price Per Purchased Item]} DIMENSION PROPERTIES PARENT_UNIQUE_NAME,HIERARCHY_UNIQUE_NAME ON COLUMNS , NON EMPTY Hierarchize({DrilldownLevel({[Component SKU].[Component SKU by Master Class].[All]},,,INCLUDE_CALC_MEMBERS)}) DIMENSION PROPERTIES PARENT_UNIQUE_NAME,HIERARCHY_UNIQUE_NAME,[Component SKU].[Component SKU by Master Class].[Master Component Class].[Class Category],[Component SKU].[Component SKU by Master Class].[Master Component Class].[ClID] ON ROWS  FROM (SELECT Generate(Hierarchize({[Component SKU].[Component SKU by Master Class].[All]}) AS [XL_Filter_Set_0], TopCount(Filter(Except(DrilldownLevel([XL_Filter_Set_0].Current AS [XL_Filter_HelperSet_0], , 0,INCLUDE_CALC_MEMBERS), [XL_Filter_HelperSet_0]), Not IsEmpty([Measures].[Product-To-Order %])), 30, [Measures].[Product-To-Order %])) ON COLUMNS  FROM [CLV] WHERE ([Shopping Lane].[Shopping Lane].[Shopping Lane Group].&[1],[Subentity].[Subentity Filter].[Subentity].&[2],[Event].[Category].&[-488],[Event].[Is Event].&[1],[Event].[Event Start Date].[All],[Event].[Start Date by Week].[Week].&[20160703])) WHERE ([Shopping Lane].[Shopping Lane].[Shopping Lane Group].&[1],[Subentity].[Subentity Filter].[Subentity].&[2],[Event].[Category].&[-488],[Event].[Is Event].&[1],[Event].[Event Start Date].[All],[Event].[Start Date by Week].[Week].&[20160703]) CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS",
                1
            );

        Console.WriteLine(result);

        return 0;
    }
}

非常感谢您的帮助:)

新手在论点顺序上犯了错误。该调用实际上应该如下所示:

public static int Main()
{
        IEnumerable result =
            RegExMatches(
                @"SELECT {[Measures].[Product-To-Order %],[Measures].[Gross Revenue (Stable)],[Measures].[Product Count],[Measures].[Total Order Count],[Measures].[Average SKU Discount],[Measures].[Average SKU Price Per Purchased Item]} DIMENSION PROPERTIES PARENT_UNIQUE_NAME,HIERARCHY_UNIQUE_NAME ON COLUMNS , NON EMPTY Hierarchize({DrilldownLevel({[Component SKU].[Component SKU by Master Class].[All]},,,INCLUDE_CALC_MEMBERS)}) DIMENSION PROPERTIES PARENT_UNIQUE_NAME,HIERARCHY_UNIQUE_NAME,[Component SKU].[Component SKU by Master Class].[Master Component Class].[Class Category],[Component SKU].[Component SKU by Master Class].[Master Component Class].[ClID] ON ROWS  FROM (SELECT Generate(Hierarchize({[Component SKU].[Component SKU by Master Class].[All]}) AS [XL_Filter_Set_0], TopCount(Filter(Except(DrilldownLevel([XL_Filter_Set_0].Current AS [XL_Filter_HelperSet_0], , 0,INCLUDE_CALC_MEMBERS), [XL_Filter_HelperSet_0]), Not IsEmpty([Measures].[Product-To-Order %])), 30, [Measures].[Product-To-Order %])) ON COLUMNS  FROM [CLV] WHERE ([Shopping Lane].[Shopping Lane].[Shopping Lane Group].&[1],[Subentity].[Subentity Filter].[Subentity].&[2],[Event].[Category].&[-488],[Event].[Is Event].&[1],[Event].[Event Start Date].[All],[Event].[Start Date by Week].[Week].&[20160703])) WHERE ([Shopping Lane].[Shopping Lane].[Shopping Lane Group].&[1],[Subentity].[Subentity Filter].[Subentity].&[2],[Event].[Category].&[-488],[Event].[Is Event].&[1],[Event].[Event Start Date].[All],[Event].[Start Date by Week].[Week].&[20160703]) CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS",
                @"\[[^\]]*\](\.(&)?\[[^\]]*\])*",
                1
            );

        Console.WriteLine(result);

        return 0;
}

感谢@sln和@Alanmore指出这一点

模式很好,它在C#中抛出什么样的异常。ArgumentException。它说[x-y]范围的顺序是相反的,但我不确定如何在不破坏正则表达式的情况下实际修复这个问题。你的论点是相反的。将应该是输入的内容视为正则表达式,它将
[Product to Order%]
视为一个字符类,包括无效的范围
t-t
o-o
。Ha-我一直在调试函数,但没有检查实际的参数顺序。猜一猜,如果我对.net不是那么陌生的话,我会更好地阅读字里行间的异常。非常感谢你!