quotemeta
या \Q...\E
का उपयोग करें।
निम्नलिखित परीक्षण कार्यक्रम कि quotemeta
साथ, $str
के रूप में है के खिलाफ मेल खाता है पर विचार करें, और \Q...\E
साथ: उत्पादन में
#! /usr/bin/perl
use warnings;
use strict;
my $str = "www.abc.com";
my @test = (
"www.abc.com",
"www/abc!com",
);
sub ismatch($) { $_[0] ? "MATCH" : "NO MATCH" }
my @match = (
[ as_is => sub { ismatch /$str/ } ],
[ qmeta => sub { my $qm = quotemeta $str; ismatch /$qm/ } ],
[ qe => sub { ismatch /\Q$str\E/ } ],
);
for (@test) {
print "\$_ = '$_':\n";
foreach my $method (@match) {
my($name,$match) = @$method;
print " - $name: ", $match->(), "\n";
}
}
सूचना है कि स्ट्रिंग का उपयोग के रूप में है नकली मैचों उत्पादन कर सकता है:
$ ./try
$_ = 'www.abc.com':
- as_is: MATCH
- qmeta: MATCH
- qe: MATCH
$_ = 'www/abc!com':
- as_is: MATCH
- qmeta: NO MATCH
- qe: NO MATCH
अविश्वसनीय इनपुट स्वीकार करने वाले कार्यक्रमों के लिए, नियमित अभिव्यक्तियों के रूप में ऐसी संभावित गंदे बिट्स का उपयोग करने के बारे में बेहद सावधान रहें: ऐसा करने से अप्रत्याशित रनटाइम त्रुटियां उत्पन्न हो सकती हैं, इनकार कर सकते हैं rvice भेद्यता, और सुरक्षा छेद।
स्रोत
2009-12-22 22:55:30
मैंने इसका उत्तर भी दिया है http://stackoverflow.com/questions/1893067/how-can-i-match-in-a-regular-expression/1894320#1894320 –
संभावित डुप्लिकेट [मैं विशेष वर्ण कैसे प्रबंधित करूं एक पर्ल रेगेक्स में?] (http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim