2010-01-28 21 views
11

मेरे पास एक स्ट्रिंग है जिसमें विशेष वर्ण हो सकते हैं जैसे: $, (, @, #, आदि मुझे उस स्ट्रिंग पर नियमित अभिव्यक्ति करने में सक्षम होना चाहिए।मैं स्ट्रिंग में विशेष वर्णों से कैसे बचूं जो मैं पर्ल रेगेक्स में इंटरपोलेट करता हूं?

अभी अगर मेरी स्ट्रिंग में इनमें से कोई भी वर्ण है तो रेगेक्स तोड़ने लगता है क्योंकि ये रेगेक्स के लिए आरक्षित पात्र हैं।

किसी को भी एक अच्छा सबरूटीन कि अच्छी तरह से मेरे लिए इन पात्रों में से किसी से बच जाएगा जानता है ताकि बाद में मैं कुछ ऐसा कर सकता है:

$p_id =~ /^$key/ 
+0

डुप्लिकेट: http://stackoverflow.com/questions/2135519/why-does-my-regular-expression-fail-with-certain-substitutions –

+1

संभावित डुप्लिकेट [मैं पर्ल रेगेक्स में विशेष वर्ण कैसे प्रबंधित करूं? ] (http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim

उत्तर

20
$p_id =~ /^\Q$key\E/; 
+0

\ Q और \ E क्या करता है? – goe

+2

उद्धरण और अंतराल। इसका मतलब है कि $ कुंजी को किसी विशेष वर्ण वाले स्ट्रिंग के रूप में माना जाता है। – Steven

+1

@goe, वे मेटाएक्टएक्टर्स उद्धृत करते हैं। – daotoad

6

अपने विवरण है, उससे लगता है कि आपने इसे पीछे की ओर है । आपको जिस स्ट्रिंग पर मिलान हो रहा है उस पर वर्णों से बचने की आवश्यकता नहीं है ($ p_id), आपको अपनी मिलान स्ट्रिंग '^ $ key' से बचने की आवश्यकता है।

को देखते हुए:

$p_id = '$key$^%*&#@^&%$blah!!'; 

उपयोग:

$p_id =~ /^\$key/; 

या

$p_id =~ /^\Q$key\E/; 

\ क्यू, \ ई जोड़ी के रूप में शाब्दिक के बीच में सब कुछ का इलाज। दूसरे शब्दों में, आप चर $ $ की सामग्री को देखना नहीं चाहते हैं, लेकिन वास्तविक स्ट्रिंग '$ key'। पहला उदाहरण बस $ से बच निकला।

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

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