6

我想从给定的 MDX 查询中提取信息或查询轴元素。假设我有这个查询:

SELECT NON EMPTY {
    Hierarchize({[Product].[Product Family].Members})
} ON COLUMNS, 
NON EMPTY Hierarchize ( 
    Union ( 
        CrossJoin ( {[Time].[1997].[Q1]}, 
            CrossJoin ([Store].[Store Name].Members, 
                [Store Type].[Store Type].Members
            )
        ), 
        CrossJoin({[Time].[1997].[Q2]}, 
            CrossJoin([Store].[Store Name].Members, 
                [Store Type].[Store Type].Members
            )
        )
    )
) ON ROWS FROM [Sales] 
WHERE {
    Hierarchize({[Measures].[Unit Sales]})
}

我想提取的子字符串具有这样的模式: [...](.[...]) 或 [...].[...].Members

请注意,... 表示任何字母数字,括号内的含义可以重复出现。因此,我期望的结果是:

[产品].[产品系列].成员;[时间].[1997].[Q1];[时间].[1997].[Q2];[商店].[商店名称].会员;[店铺类型].[店铺类型].会员;[测量].[单位销售额]

我尽了最大努力,终于想出了这个正则表达式:

\[.*?[A-Za-z\s]\](.*?(\.\[.*?[A-Za-z\s]\])|(\.Members))

但结果是:

[产品].[产品系列];[时间].[1997].[Q1]}, CrossJoin ([Store]; [Store Name].Members, [Store Type].[Store Type]; [Time].[1997].[Q2]}, CrossJoin ([Store]; [Store Name].Members, [Store Type].[Store Type]; [Sales] WHERE {Hierarchize({[Measures].[Unit Sales]

有人可以对我的正则表达式进行任何更正吗?任何帮助,将不胜感激。

4

2 回答 2

4

嗯,你可以试试这个:

(\[[\w ]+\]\.\[[\w ]+\](?:\.(?:Members|\[Q\d\]))?)

这似乎对我有用。我在Rubular上试过了。

于 2013-04-07T17:00:33.103 回答
1

有趣的任务...

那么请尝试以下
(?<result>\[[^\]]+\]\.\[[^\]]+\]\.Members)|(?<result>(\[[^\]]+\]\.){2}\[[^\]]+\])

如果你result在每场比赛中阅读小组,你会得到你想要的。我使用Expresso构建RegEx.

于 2013-04-07T17:43:11.650 回答