在Regex中获取嵌套组的问题

时间:2011-08-26 22:04:34

标签: regex nested-groups

给出以下文字:

//[&][$][*]\n81723&8992%9892*2343%8734

我需要得到:

1. &
2. $
3. *
4. 81723&8992%9892*2343%8734

第一行定义了分隔第二行数字的分隔符。 存在未定义数量的分隔符。

我制作了这个正则表达式:

//(?:\[([^\]]+)\])+\n(.+)

但只获得了2组。第一个是最后一个分隔符,第二个是包含数字的字符串。我试过但我无法得到所有的分隔符。 我不擅长正则表达式,但我认为第一组在(?:[([^]] +)])+的每次迭代都被覆盖,我无法解决这个问题。

任何帮助?

此致

维克多

4 个答案:

答案 0 :(得分:4)

这不是您正在处理的嵌套组,而是重复的组。而你是对的:当一个捕获组由量词控制时,它会在每次迭代时重新填充,因此最终值是最后一次捕获的内容。

我所熟悉的任何正则表达式都无法实现你想要做的事情。

以下是更全面的解释:Repeating a Capturing Group vs. Capturing a Repeated Group

答案 1 :(得分:1)

我认为你可以做的最好的事情(使用正则表达式)将是这样的:

(?:\[([^\]]+)\])?(?:\[([^\]]+)\])? #....etc....# \n(.+)

答案 2 :(得分:1)

你不能写(foo)+之类的东西并与“foofoofoo”相匹配,并期望得到三组。你每打开一个人只能获得一个。这意味着你需要更多的团体。

答案 3 :(得分:-1)

以下正则表达式适用于javascript:

(\[.+\])(\[.+\])(\[.+\])\\n(.*)

这假定您的& $ *会有值。