Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

(dkubb) Re: (2) Returning _which_ pattern matched...?

by dkubb (Deacon)
on Aug 03, 2001 at 20:33 UTC ( #102033=note: print w/replies, xml ) Need Help??

in reply to Returning _which_ pattern matched...?

Remember to use quotemeta or \Q and \E on any variables you are going to use inside a regex. If you forget to, and any special regex meta-characters exist in your variables, your program can do anything between match unwanted strings to completely die'ing.

I see this problem in alot of code where the program "builds" a regex. Bugs caused by forgetting to do this can go undetected for a long time until a "+", "|" or a ")" occurs somewhere in the incoming data. (assuming the data being searched through is not hard coded into the script, and thus it's content controlled by the programmer - as it's often not in the real world)

Here's some sample code to illustrate the use of quotemeta in solving your problem:

#!/usr/bin/perl -w use strict; use constant STRING => 'clintonesque'; use constant TO_MATCH => qw( Clinton Bush Reagan ); my $regex = join '|', map { quotemeta } TO_MATCH; my ($first_match) = STRING =~ /($regex)/i; print $first_match;

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://102033]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2022-12-09 23:07 GMT
Find Nodes?
    Voting Booth?

    No recent polls found