正则表达式帮助字符串

时间:2011-10-15 17:06:40

标签: regex

我有一个字符串

2045111780&&-3&5&-7

我想要一个正则表达式给我组:

2045111780
&&-
3

...然后将下一组分组为

3
&
5

......等等。

我想出了(\d+)(&&?-?)?,但这给了我以下组:

2045111780
&&-

...然后将下一组分组为

3
&

......等等。

请注意,我需要delim (正则表达式:&&?-?

感谢。

update1:​​更改了组输出。

4 个答案:

答案 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的分割方法更加清晰。