3

给定以下文本:

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

我需要得到:

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

第一行定义分隔第二行数字的分隔符。有未定义数量的分隔符。

我做了这个正则表达式:

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

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

有什么帮助吗?

问候

胜利者

4

4 回答 4

4

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

你想要做的事情在我熟悉的任何正则表达式风格中都是不可能的。

这是一个更完整的解释:重复捕获组与捕获重复组

于 2011-08-26T22:42:38.363 回答
1

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

(?:\[([^\]]+)\])?(?:\[([^\]]+)\])? #....etc....# \n(.+)
于 2011-08-26T22:12:42.293 回答
1

您不能编写类似“foofoofoo”之类的(foo)+内容并与“foofoofoo”匹配并期望得到三个组。每个开放式父母只能获得一个。这意味着您需要更多已编写的组。

于 2011-08-26T22:35:59.500 回答
-1

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

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

这假设您的& $ *遗嘱具有价值。

于 2011-08-26T22:32:07.437 回答