2011-06-20 16 views
8

कुछ कोड मैं बनाए रखने कर रहा हूँ में में करते हैं, मैं अभिव्यक्ति पाया है:क्या करता है डी पर्ल नियमित अभिव्यक्ति

$r->{DISPLAY} =~ s/\Device//s; 

मुझे क्या आश्चर्य है कि यह दोनों ही उपकरण और डिवाइस से मेल खाता है!

मुझे दस्तावेज़ में \ D का कोई उल्लेख नहीं मिला है, केवल \ d।

कोई स्पष्ट कर सकता हूँ कृपया ...

+0

आप लगभग निश्चित रूप से '\ D' ... – geoffspear

+1

के इस अपर्याप्त उपयोग के बजाय केस-असंवेदनशील मिलान ('s/device // si') चाहते हैं, यह जानना भी उपयोगी है कि आप अपने पर' perldoc perlre' चलाते हैं कमांड लाइन, या यहां जाएं: http://perldoc.perl.org/perlre.html। – FMc

+2

मैं इसे "obfuscated" उपयोग के बजाय '\ D' का" गलत "उपयोग कहूंगा ... वह रेगेक्स" क्रीविस "," लेविस "और यहां तक ​​कि" #evice "से मेल खाएगा, न केवल" डिवाइस " "और" डिवाइस "। –

उत्तर

19

\D\d का निषेध है, यानी यह कुछ भी है कि एक अंकों नहीं है से मेल खाता है।

+0

धन्यवाद, यह बताता है !! – Roger

+2

@Roger यदि आप sepp2k के उत्तर को पसंद करते हैं, तो आपको यह संकेत देने के लिए बाईं ओर दिए गए चेकमार्क पर क्लिक करना चाहिए कि इस उत्तर ने आपके प्रश्न का उत्तर दिया है। – TLP

+0

यह निश्चित रूप से सही उत्तर था, धन्यवाद sepp2k – Roger

11

उस रेगेक्स में, \D एक टाइपो की तरह दिखता है। यह d और D दोनों के लिए काम करता है, केवल इसलिए कि यह किसी भी चरित्र से मेल खाता है जो अंक (0-9) नहीं है।

एक अधिक उपयुक्त regex (यदि इरादे "डिवाइस" या "डिवाइस" मैच के लिए है), है:

s/(d|D)evice// # one way 
s/[dD]evice// # another way 

s विकल्प भी थोड़ा अजीब है। perldoc perlop

s Treat string as single line. (Make . match a newline) 

से और वहाँ इस तरह के कोई मिलता-जुलता है कि लाइन में चल रही है।

+0

हां, मुझे लगता है कि '\' एक कट और पेस्ट त्रुटि थी, क्योंकि डिवाइस के साथ एक मैच की आवश्यकता थी ... – Roger

+0

अजीब प्रतिलिपि/पेस्ट त्रुटि .. ऐसा लगता है कि किसी भी संदर्भ में ऐसा नहीं लगता है, सिवाय इसके कि मैं सोच सकता हूं शायद एक विंडोज पथ से, उदाहरण के लिए "C: \ डिवाइस" ... – TLP

2

आपके पास पहले से ही एक जवाब है, हालांकि, इसके बारे में perldoc perlrecharclass में प्रलेखन है। Backslash sequences के बारे में जानकारी देखें।

यह भी perldoc perlrequick में और नियमित रूप से perldoc perlretutके तहत उपयोग करना चरित्र वर्गों में उल्लेख किया गया है। हालांकि, उन दो वर्गों में, यह दफन किया गया है।

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