2013-04-07 66 views
4

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

我想提取物具有图案像这样的字符串:([...])。 [...]或 [...] [。 ..]。会员

请注意,...表示任何字母数字,以及内部括号意味着什么可以重现。因此,我期望的结果是:

[Product]。[Product Family] .Members; [时间] [1997] [Q1]。。 [Time]。[1997]。[Q2]; [Store]。[Store Name] .Members; [商店类型]。[商店 类型]。成员; [措施] [单位销售]

我尽力终于想通这个表达式:

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

但结果是:

[产品] [产品系列。 ; [Time]。[1997]。[Q1]},CrossJoin([Store]; [Store Name] .Members,[Store Type]。[Store Type]; [Time]。[1997]。[Q2]}, CROSSJOIN([存储] [存储名称] .Members,[存储类型] [商铺类型]。 [销售] WHERE {Hierarchize({[措施] [单位销售]

能有人给?我的正则表达式的任何修正 任何帮助,将不胜感激

回答

3

嗯,你可以试试这个:

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

这似乎为工作我。我在Rubular上试过了。

+0

非常感谢!它就像魅力一样。 – 2013-04-08 03:31:05

+0

太棒了!别客气!^_^ – Jerry 2013-04-08 04:50:33

+0

@Jerry比我的更好的解决方案。做得好。 – DHN 2013-04-08 06:40:15

1

有趣的任务......

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

如果你在每一个阅读群体result匹配,你会得到你想要的东西。我用Expresso构建RegEx

+0

非常感谢!然而,这个正则表达式在这里工作不好。我使用[Pattern](https://itunes.apple.com/id/app/id429449079?mt=12)来测试正则表达式。也许有失真或类似的事情发生? – 2013-04-08 03:40:01