Date: Mon, 2 Oct 2000 17:09:50 -0400 (EDT) From: Christopher Rued <c.rued@xsb.com> To: "Andresen,Jason R." <jandrese@mitre.org> Cc: Mark Ovens <marko@FreeBSD.ORG>, Christopher Rued <c.rued@xsb.com>, freebsd-questions@FreeBSD.ORG Subject: Re: Perl question Message-ID: <14808.63902.442934.667120@chris.xsb.com> In-Reply-To: <39D8D5D9.67A3074B@mitre.org> References: <14808.52583.347797.384055@chris.xsb.com> <20001002191537.G252@parish> <20001002192617.I252@parish> <39D8D5D9.67A3074B@mitre.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Andresen,Jason R. writes:
> > BTW, your RE should have a ``*'' as well:
> >
> > /x.*?y/
> >
>
> Maybe, it depends on exactly what he was trying to get.
>
> The first 3 character match where x and y are the first and third
> character respectivly, then x.y is exactly what you want. The smallest
> set of characters that have x and y as boundry values? Then your x.*?y
> is correct. The smallest set of characters that have x and y as
> boundries and have at least one character in between them? x.+?y is
> needed.
The RE I used was precisely what I wanted: x.y (an `x' followed by
exactly one character followed by a `y').
When I run the following:
#!/usr/bin/perl
$a = "xayxbyxcyxdy";
@s = $a =~ /x.y/;
print "\@s is @s\n";
I get:
@s is 1
So, I seem to be getting the truth value rather than the first match
in the string. If, however, I wrap the entire RE in a parentheses
(make it a subexpression) like so:
#!/usr/bin/perl
$a = "xayxbyxcyxdy";
@s = $a =~ /(x.y)/;
print "\@s is @s\n";
I get the results I wanted to begin with:
@s is xay
(I discovered this shortly after I sent the first message about this).
What confuses me is that if I specify the global option, I do not need
to use a subexpression. For example, if I run the following code:
#!/usr/bin/perl
$a = "xayxbyxcyxdy";
@s = $a =~ /x.y/g;
print "\@s is @s\n";
I get:
@s is xay xby xcy xdy
So, this leaves me with a couple of questions, the main one being:
Why the different treatment for single matches and global
matches?
and a less important one:
Why is there no way to have the first match assigned to a scalar,
since we can be sure that there will be at most one match returned?
If anyone can explain this, and/or answer the questions posed above,
I'd appreciate it.
-Chris
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?14808.63902.442934.667120>
