2013-04-07 98 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