我有一个字符串
2045111780&&-3&5&-7
我想要一个正则表达式给我组:
2045111780
&&-
3
...然后将下一组分组为
3
&
5
......等等。
我想出了(\d+)(&&?-?)?
,但这给了我以下组:
2045111780
&&-
...然后将下一组分组为
3
&
......等等。
请注意,我需要delim (正则表达式:&&?-?
)
感谢。
update1:更改了组输出。
答案 0 :(得分:4)
我认为不可能在组之间共享匹配(在您的示例中为-3)。因此,我建议进行2行处理:拆分弹簧并在阵列中取2对。例如,使用Perl:
$a = "2045111780&&-3&5&-7";
@pairs = split /&+/, $a;
# at this point you get $pairs[0] = '2045111780', $pairs[1] = '-3', ...
答案 1 :(得分:0)
(-?\d+|&+)
怎么样?它会将数字与可选的减号和& s序列匹配。
答案 2 :(得分:0)
如果我理解正确,您希望重叠匹配。
您可以使用像(-?\d+)(&&?)(-?\d+)
这样的正则表达式并重复匹配,直到失败,每次都将给定字符串的开头删除到第三组的开头。
答案 3 :(得分:0)
你可以在perl中这样做:
$ perl -ne 'while (/(-?\d+)(&&?)(-?\d+)/g) { print $1, " ", $2, " ", $3, "\n"; pos() -= length($3); }'
2045111780&&-3&5&-7 # this is the input
2045111780 && -3
-3 & 5
5 & -7
但那非常难看。 Miguel Prz的分割方法更加清晰。