best woud be if i can place every NUMBER(numbers) in one array and the rest in one array, the stuff infront of the ; can be ignored will be splited away
Your specs are unclear; your working example does not do that. Instead, the first
\d+ ends up
in
$pre, the stuff in parens in
$in and the remainder in
$post.
I guess you want something that keeps doing that, but stuffs the \d+ cuddled to an opening paren
into $in if there are more numbers up front. Quick shot:
#!/usr/bin/perl
use warnings;
use strict;
while (<DATA>) {
chomp;
my ($ezb, $numbers) = split(';',$_);
my( $pre, $in, $post )= $numbers =~ /^(\d+(?=\()|[\d+, ]+?)(\d*\(.
+*\))(.*)/;
print "$_:\n \$pre = '$pre\n \$in = '$in'\n \$post = '$post'
+\n";
}
__DATA__
201.1;201(27, 28, 3, 4, 83, 84, 890, 897, 898, 9), 2054
201.2;201(1, 20-26, 29, 80-82, 891-896, 899)
201.3;201(52-54, 6, 75, 76, 85-88)
201.4;201(50, 51, 55-59, 70-74, 77-79)
2302.1;2302, 2304(3-8, 92-99), 2305(2, 4-9)
231.1;2301, 2303, 2304(1, 2, 90, 91), 2305(1, 3), 2306, 2307, 2308
outputs
201.1;201(27, 28, 3, 4, 83, 84, 890, 897, 898, 9), 2054:
$pre = '201
$in = '(27, 28, 3, 4, 83, 84, 890, 897, 898, 9)'
$post = ', 2054'
201.2;201(1, 20-26, 29, 80-82, 891-896, 899):
$pre = '201
$in = '(1, 20-26, 29, 80-82, 891-896, 899)'
$post = ''
201.3;201(52-54, 6, 75, 76, 85-88):
$pre = '201
$in = '(52-54, 6, 75, 76, 85-88)'
$post = ''
201.4;201(50, 51, 55-59, 70-74, 77-79):
$pre = '201
$in = '(50, 51, 55-59, 70-74, 77-79)'
$post = ''
2302.1;2302, 2304(3-8, 92-99), 2305(2, 4-9):
$pre = '2302,
$in = '2304(3-8, 92-99), 2305(2, 4-9)'
$post = ''
231.1;2301, 2303, 2304(1, 2, 90, 91), 2305(1, 3), 2306, 2307, 2308:
$pre = '2301, 2303,
$in = '2304(1, 2, 90, 91), 2305(1, 3)'
$post = ', 2306, 2307, 2308'
Is that what you seek to accomplish?
--shmem
_($_=" "x(1<<5)."?\n".q·/)Oo. G°\ /
/\_¯/(q /
---------------------------- \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}