用于从MDX查询中提取元素的正则表达式

时间:2013-04-07 16:02:44

标签: regex mdx

我想从给定的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]})
}

我想提取的子字符串有这样的模式: [...](。[...]) 要么 [...] [...]。成员

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

  

[产品]。[产品系列]。会员; [时间] [1997] [Q1]。。   [时间] [1997] [Q2]。。 [商店]。[商店名称]。会员; [商店类型]。[商店   TYPE] .Members; [措施]。[单位销售]

我尽我所能,最后想出了这个正则表达式:

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

但结果是:

  

[产品]。[产品系列]; [时间]。[1997]。[Q1]},CrossJoin([商店];   [商店名称]。会员,[商店类型]。[商店类型]; [时间]。[1997] [Q2]},   CrossJoin([Store]; [Store Name] .Members,[Store Type]。[Store Type];   [Sales] WHERE {Hierarchize({[Measures]。[Unit Sales]

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

2 个答案:

答案 0 :(得分:4)

嗯,你能试试吗:

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

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

答案 1 :(得分:1)

有趣的任务......

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

如果你在每场比赛中看到小组result,你会得到什么。我使用Expresso来构建RegEx