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>