Deb wrote:
> Hi,
>
> I'm having trouble coming up with a regular expression for $lines
> in @lines of this form:
>
> units =               [EMAIL PROTECTED] [EMAIL PROTECTED]:[EMAIL PROTECTED]
> units =               [EMAIL PROTECTED]
> units =               [EMAIL PROTECTED] [EMAIL PROTECTED]
>
>
> ' ^units = ' is expected, all the rest is not - ie, one or more
> addrs, but they must be comma separated, not space, semi-colon or
> colon separated.  So far, I've got:
>
> foreach my $line (@lines) {
>    if ($line =~ /^units/)
>    {
>      $line =~ s/:/,/g;
>      $line =~ s/;/,/g;
>    }
> }
>
> The part I'm having trouble with is replacing the space(s) between
> the addresses.  I don't want to touch any other whitespace.  Only
> the space or spaces which might separate more than one address.
> It's okay if there's a comma and a space, but anything else needs
> to be replaced with a comma.  There also doesn't have to be a space
> after the comma.  Only the comma is necessary.
>
> I can't seem to find the right incantation to replace just those
> spaces.
>

Hi Deb.

Here's the way I'd do it. First check that the line starts with
'units' - whitespace - '=' - whitespace and strip it off in one
statement. Then you seem to be left with a number of emails
which are separated by any of colon, semicolon or whitespace, so
just split on a regex which says just that and rejoin the list with
commas.

  foreach my $line (@lines) {

    next unless $line =~ s/^units\s+=\s+//;

    my @emails = split /[:;\s]+/, $line;
    $line = join ',', @emails;
  }

HTH,

Rob















-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to