index</i>, it is incorrect for it won't give you the offset you want i
+f the substring appears more than once in the input. Eg.
<c>
$ perl -E 'my $s="ME170-5/2/10-ME172-5/2/10-ME4028"; while ($s=~m|(\d{
+1,2}/\d{1,2}/\d{1,2})|g){++$x;say "$x Found $1:" . (index($s,$1)+1)}'
1 Found 5/2/10:7
2 Found 5/2/10:7
$ perl -E 'my $s="ME170-5/2/10-ME172-5/2/1-ME4028"; while ($s=~m|(\d{1
+,2}/\d{1,2}/\d{1,2})|g){++$x;say "$x Found $1:" . (index($s,$1)+1)}'
1 Found 5/2/10:7
2 Found 5/2/1:7
$
Instead, if you really want to know the offsets, then use either the pos or the @- match variable to find where the regular expression has matched:
$ perl -E 'my $s="ME170-5/2/10-ME172-5/2/10-ME4028"; while ($s=~m|(\d{
+1,2}/\d{1,2}/\d{1,2})|g){++$x;say "$x Found $1:" . $-[1]}'
1 Found 5/2/10:6
2 Found 5/2/10:19
$ perl -E 'my $s="ME170-5/2/10-ME172-5/2/1-ME4028"; while ($s=~m|(\d{1
+,2}/\d{1,2}/\d{1,2})|g){++$x;say "$x Found $1:" . $-[1]}'
1 Found 5/2/10:6
2 Found 5/2/1:19
$
However, maybe you don't want to know the positions at all, but instead match the port numbers and dates with a single regular expression that has two captures.
Also, those newlines and plus signs inside the braces are just a mistake you made when pasting here, right?
|