2013-02-23 8 views
17

मैं मिलान फ़ाइल नामों के लिए एक रेगुलर एक्सप्रेशन से पैटर्न के रूप में एक चर का उपयोग करना चाहते हैं:उपयोग चर

my $file = "test~"; 
my $regex1 = '^.+\Q~\E$'; 
my $regex2 = '^.+\\Q~\\E$'; 
print int($file =~ m/$regex1/)."\n"; 
print int($file =~ m/$regex2/)."\n"; 
print int($file =~ m/^.+\Q~\E$/)."\n"; 

परिणाम (या ideone.com पर):

0 
0 
1 

किसी को व्याख्या कर सकते हैं मैं कैसे एक चर का उपयोग RegEx पैटर्न के रूप में कर सकते हैं?

उत्तर

8

आप एकल-उद्धृत/गैर-इंटरपोलेटेड स्ट्रिंग में \Q का उपयोग नहीं कर सकते। यह लेजर द्वारा देखा जाना चाहिए।

वैसे भी, टिल्डे मेटा-कैरेक्टर नहीं है।

use regex "debug" जोड़ें और आप देखेंगे कि वास्तव में क्या हो रहा है।

+0

धन्यवाद, मैं '$ regex = ~ s/\\ क्यू (। *?) \\ ई/quotemeta ($ 1)/ge;' \ \ .. \ E को प्रतिस्थापित करने के लिए उपयोग करता हूं। क्या कोई और तरीका है? – Ted

+1

@ user72757 हां, पहले स्थान पर अपने तारों में '\ Q'' \ E' न रखें। – melpomene

+2

अजीब, यह एक चर के रूप में RegEx के बारे में पूछा गया था, लेकिन ऐसा लगता है कि चर्चा '\ Q' और' \ E':/ – ArtM

48

documentation के रूप में कहते हैं:

$re = qr/$pattern/; 
    $string =~ /foo${re}bar/; # can be interpolated in other patterns 
    $string =~ $re; # or used standalone 
    $string =~ /$re/; # or this way 

तो, qr बोली की तरह ऑपरेटर का उपयोग करें।

+0

पर ले जाया गया यह वही है जो मैं ढूंढ रहा था! मैं आपको 150 अंक – GlassGhost

+0

@GlassGhost का बक्षीस देता हूं - क्या आपने इसे पढ़ने के बाद या बाद में बक्षीस खोला था? क्या आपको अंक देने के लिए समाप्त होने तक इंतजार करना है? वैसे भी, 'qr //' एक रेगेक्स ऑब्जेक्ट बनाता है, लेकिन आपको सावधान रहना होगा कि आप इसे क्या खिलाते हैं। यदि यह एक शाब्दिक है तो आपको पहले उस पर एक quotemeta() चलाना होगा। – sln

+0

@ एसएलएन आपको बकाया खर्च करने के लिए 24 घंटे इंतजार करना होगा। – GlassGhost

संबंधित मुद्दे