Date: Sun, 5 Oct 2003 09:41:10 -0700 (PDT) From: =?ISO-8859-1?Q?Mikko_Ty=F6l=E4j=E4rvi?= <mbsd@pacbell.net> To: Dan Langille <dan@langille.org> Cc: freebsd-hackers@freebsd.org Subject: Re: testing for substrings in perl Message-ID: <20031005092645.J3248@atlas.home> In-Reply-To: <20031005111656.R18760@xeon.unixathome.org> References: <20031005111656.R18760@xeon.unixathome.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 5 Oct 2003, Dan Langille wrote:
> Hi,
>
> I have a perl regex to test if a file resides under a particular
> directory. The test looks like this:
>
> if ($filename =~ $directory) {
> # yes, this filename resides under directory
> }
>
> This is working for most cases. However, it fails is the directory
> contains a +. For example:
>
> $filename = 'ports/www/privoxy+ipv6/files/patch-src::addrlist.c';
>
> $match = "^/?" . 'ports/www/privoxy+ipv6' . "/";
> if ($filename =~ $match) {
> print "found\n";
> } else{
> print "NOT found\n";
> }
>
> Yes, I can escapte the + in the directory name, but then I'd have to test
> for all those special regex characters and escape them too.
Or use quotemeta()...
> I think it might just be easier to do a straight comparison of the first N
> characters of the two strings where N = length of the directory name.
>
> Any suggestions?
...or the \Q operator. Thus:
$filename = 'ports/www/privoxy+ipv6/files/patch-src::addrlist.c';
$dir = 'ports/www/privoxy+ipv6';
if ($filename =~ m:^/?\Q$dir\E/:) {
print "found\n";
} else{
print "NOT found\n";
}
$.02,
/Mikko
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031005092645.J3248>
