给出以下文字:
//[&][$][*]\n81723&8992%9892*2343%8734
我需要得到:
1. &
2. $
3. *
4. 81723&8992%9892*2343%8734
第一行定义了分隔第二行数字的分隔符。 存在未定义数量的分隔符。
我制作了这个正则表达式:
//(?:\[([^\]]+)\])+\n(.+)
但只获得了2组。第一个是最后一个分隔符,第二个是包含数字的字符串。我试过但我无法得到所有的分隔符。 我不擅长正则表达式,但我认为第一组在(?:[([^]] +)])+的每次迭代都被覆盖,我无法解决这个问题。
任何帮助?
此致
维克多
答案 0 :(得分:4)
这不是您正在处理的嵌套组,而是重复的组。而你是对的:当一个捕获组由量词控制时,它会在每次迭代时重新填充,因此最终值是最后一次捕获的内容。
我所熟悉的任何正则表达式都无法实现你想要做的事情。
以下是更全面的解释:Repeating a Capturing Group vs. Capturing a Repeated Group
答案 1 :(得分:1)
我认为你可以做的最好的事情(使用正则表达式)将是这样的:
(?:\[([^\]]+)\])?(?:\[([^\]]+)\])? #....etc....# \n(.+)
答案 2 :(得分:1)
你不能写(foo)+
之类的东西并与“foofoofoo”相匹配,并期望得到三组。你每打开一个人只能获得一个。这意味着你需要更多的团体。
答案 3 :(得分:-1)
以下正则表达式适用于javascript:
(\[.+\])(\[.+\])(\[.+\])\\n(.*)
这假定您的&
$
*
会有值。