2010-04-05 7 views
20

मेरे पास इसमें नल के साथ एक टेक्स्ट स्रोत है और मुझे अपने regex पैटर्न के साथ उन्हें बाहर खींचने की जरूरत है। रेगेक्स भी एक शून्य चरित्र से मेल खा सकता है?क्या पीसीआरई रेगेक्स एक शून्य चरित्र से मेल खा सकता है?

मुझे केवल एहसास हुआ कि मेरे पैटर्न ने मैच करने से इनकार कर दिया था और जब मैंने इसे नोटपैड ++ में चिपकाया तो यह सभी शून्य वर्ण दिखाए।

उत्तर

35
\x00 

यह एक शून्य चार है।

+0

धन्यवाद। बहुत अच्छा काम करता है लेकिन नल के साथ काम करने के लिए मेरे किसी भी 'विज़ुअल' टूल को नहीं मिल सकता है लेकिन रेगेक्स बडी के जीरे दृश्यों के पीछे इसे करेंगे। – Keng

+0

ऐसा लगता है कि ['\ x0' काम करना चाहिए] (http://superuser.com/a/287998/2259) भी। – l0b0

+0

'\ x0' तब तक नहीं करना चाहिए जब तक कि यह एकमात्र चीज न हो जो आप मेल खाते हैं। यदि आप '\ x0apple' से मिलान करने का प्रयास कर रहे थे जो' \ npple' – Augwa

1

शून्य चरित्र से मेल खाने वाला एक मुद्दा यह है कि आपको इसे आने के लिए पहले व्यवस्था करने की आवश्यकता है। बहुत सी भाषाएं नल-टर्मिनेटेड तारों का उपयोग करती हैं, इसलिए आपका मिलान पूरे इनपुट के खिलाफ नहीं हो सकता है।

पीसीआरई में इसे व्यक्त करने के तरीके के रूप में, \ 000 काम करता है और इसके बाद कुछ भी हो सकता है, जैसा कि \ x {} (लेकिन ऑक्टल संस्करण मेरी राय में स्किमिंग करते समय पहचानने में आसान है regex)।

the PCRE manpages देखें और गैर-प्रिंटिंग वर्ण के लिए विभिन्न विवरणों में एक शून्य निर्दिष्ट करने के पूर्ण विवरण के लिए खोजें।

+0

वर्तमान पता http://www.pcre.org/original का उपयोग करना पड़ा /doc/html/pcrepattern.html#SEC5 – test30

1

पिछले उत्तर में एक और विवरण स्पष्टीकरण/जोड़ने के लिए: पीसीआरई लाइब्रेरी पैटर्न को "सी" नल-टर्मिनेटेड स्ट्रिंग के रूप में स्वीकार करता है। (पीसीआरई दस्तावेज़ों का उद्धरण: "पैटर्न एक सी स्ट्रिंग एक बाइनरी शून्य द्वारा समाप्त किया गया है"।) इसका मतलब है कि पैटर्न में एक शाब्दिक एनयूएल चरित्र नहीं हो सकता है - इसके बजाय, इसे हमेशा अन्य उत्तरों में वर्णित माध्यमों से बचने के लिए हमेशा से बच जाना चाहिए। ("पैटर्न स्ट्रिंग के विपरीत, विषय में बाइनरी शून्य हो सकती है।" "4. हालांकि विषय स्ट्रिंग में बाइनरी शून्य वर्ण समर्थित हैं, उन्हें पैटर्न स्ट्रिंग में अनुमति नहीं है क्योंकि यह न ही mal C के रूप में पारित किया गया है स्ट्रिंग, शून्य से समाप्त हो गया। में बाइनरी शून्य का प्रतिनिधित्व करने के लिए पैटर्न का उपयोग किया जा सकता है। ")

एनयूएल चरित्र पीसीआरई पैटर्न में एकमात्र चरित्र है जो बच निकला जाना चाहिए, अन्य सभी शाब्दिक हो सकते हैं: " गैर-प्रिंटिंग वर्णों की उपस्थिति पर कोई प्रतिबंध नहीं है, बाइनरी शून्य के अलावा पैटर्न को समाप्त करता है"।

अंतिम तुलनात्मक नोट के रूप में, कुछ अन्य पर्ल-संगत रेगेक्स इंजन पैटर्न में शाब्दिक एनयूएल की अनुमति देते हैं, उदाहरण के लिए, पायथन एसआरई। जैसे Python3 से urlib.parse निम्नलिखित पंक्ति है: _asciire = re.compile('([\x00-\x7f]+)')। कच्चे शाब्दिक को इंगित करने के लिए "आर" की कमी पर ध्यान दें - इसका मतलब है कि यहां से अनइस्केपिंग पाइथन स्तर पर होती है, और फिर मॉड्यूल पैटर्न में 0x00 और 0x7f के मान वाले अक्षर प्राप्त करता है।

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