2014-10-07 74 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+)