2014-10-07 19 views
-1

我有這樣的字符串,例如:如何使用正則表達式獲得重複組?

Something`3[[typeOne],[typeTwo],[typeThree]][[typeOne],[typeTwo],[typeThree]] 

可包含N種:

[[type1],...,[typeN]] 

我想提取這些內部typeX字符串(type1,...,typeN)。我使用這個模式(忽略空格 - 它只是可讀性):

\[ 
    (?:,?\[ 
     ([^\]]*) 
    \])+ 
\] 

但它給我的只有最後一種類型(typeN)。如何使用正則表達式獲得所有typeX字符串?

編輯:

其實,真正的問題是

Something`3[[typeOne],[typeTwo],[typeThree]] 

可包含N種:

Something`N[[type1],...,[typeN]] 

我的正則表達式是:

(?:`(?<count>\d+)\[ 
    (?:,?\[([^]]+)\])+ 
\]) 

對不起改變這個問題Ë中,我試圖簡化問題的輸入,並some solution below (Avinash Raj)並解決現有的輸入,但不是這一個...

編輯2:

我似乎過於簡化我的問題,爲求可讀性的...這是我的真實和充分的要求:

How to get repeating groups that nest within another group with regex?

回答

1

你爲什麼不試試呢?

(?:Something(?:`(\d+))?\[|(?<!^)\G)\[*([^\[\],\s]*) 

DEMO

+0

您的解決方案几乎是它,但我的問題是一個比較複雜 - 請我的編輯... – Tar 2014-10-07 10:29:19

+0

所以要匹配中的字符串'[]'只有上線,其包含'某物號碼'。我對麼? – 2014-10-07 10:31:24

+0

是的。我也想得到數字和領先的'Something',但數字和'[]'組都可以丟失,所以它都在一個組中(爲了讓我有條件:它可以是'Something '2 [[One],[Two]]'或者只是'Something',所以我想把它放在有條件的非捕獲組中:'(?:...)?' – Tar 2014-10-07 10:36:53

0

不要擔心使用正則表達式,當你可以本地做。

var str = "[[typeOne],[typeTwo],[typeThree]]"; 
var arr = str.Replace("[","").Replace("]","").Split(','); // easy-peasy 

DEMO

0

只需使用\w+:它在括號中的列表中的所有元素相匹配。只是,如果你需要捕獲添加parenthesises:(\w+)