2009-08-08 17 views
11

क्या कोई विशेष रेगेक्स स्टेटमेंट है जैसे \ w जो सभी प्रिंट करने योग्य पात्रों को दर्शाता है? मैं यह सत्यापित करना चाहता हूं कि एक स्ट्रिंग में केवल एक वर्ण होता है जिसे मुद्रित किया जा सकता है - यानी। ASCII नियंत्रण वर्णों जैसे \ b (घंटी), या शून्य, आदि शामिल नहीं हैं। कीबोर्ड पर कुछ भी ठीक है, और यूटीएफ वर्ण भी हैं।सभी प्रिंट करने योग्य पात्रों के लिए Regex

यदि कोई विशेष विवरण नहीं है, तो मैं इसे रेगेक्स में कैसे निर्दिष्ट कर सकता हूं?

+3

यदि आप शुद्ध ASCII वर्णों की तलाश में थे, तो आप रेगेक्स के साथ '[- ~] +' की तरह जा सकते हैं, जो प्रत्येक निम्न ASCII से अंतरिक्ष से टिल्ड तक मेल खाता है। । – saluce

उत्तर

7

एक पॉज़िक्स चरित्र श्रेणी पदनाम [:print:] है जो प्रिंट करने योग्य पात्रों से मेल खाना चाहिए, और [:cntrl:] नियंत्रण वर्णों के लिए मेल खाना चाहिए। ध्यान दें कि ASCII तालिका में ये मिलान कोड, इसलिए वे अन्य एन्कोडिंग से मेल खाने के लिए उपयुक्त नहीं हो सकते हैं।

यह विफल होने पर, [\x00-\x1f] अभिव्यक्ति ASCII नियंत्रण वर्णों से मेल खाती है, फिर भी, ये अन्य एन्कोडिंग में प्रिंट करने योग्य हो सकती हैं।

1

यह आपके द्वारा उपयोग किए जा रहे रेगेक्स पैकेज पर जंगली रूप से निर्भर करता है। यह उन परिस्थितियों में से एक है जिसके बारे में कुछ विग ने कहा कि मानकों के बारे में बड़ी बात यह है कि चुनने के लिए बहुत सारे लोग हैं।

यदि आप सी का उपयोग करते हैं, तो isprint(3) फ़ंक्शन/मैक्रो आपका मित्र है।

13

अपने regex स्वाद Unicode properties का समर्थन करता है, तो यह शायद सबसे अच्छा सबसे अच्छा तरीका है:

\P{Cc} 

किसी भी चरित्र है कि एक नियंत्रण चरित्र नहीं है, से मेल खाता है कि क्या यह ASCII हो - [\x00-\x1F\x7F] - या लेटिन 1 - [\x80-\x9F] (जिसे सी 1 नियंत्रण वर्ण भी कहा जाता है)।

[:print:] या \p{Print} जैसे पॉज़िक्स कक्षाओं के साथ समस्या यह है कि वे रेगेक्स स्वाद और संभवतः, अंतर्निहित प्लेटफार्म की लोकेल सेटिंग्स के आधार पर विभिन्न चीजों से मेल खा सकते हैं। जावा में, वे सख्ती से ASCII- उन्मुख हैं। इसका मतलब है कि \p{Print} केवल एएससीआईआई प्रिंटिंग वर्णों से मेल खाता है - [\x20-\x7E] - जबकि \P{Cntrl} (पूंजी 'पी' नोट करें) एक ASCII नियंत्रण चरित्र - [^\x00-\x1F\x7F] से मेल खाता है। यानी, यह किसी भी ASCII चरित्र से मेल खाता है जो नियंत्रण कक्ष नहीं है, या कोई गैर-ASCII वर्ण - जिसमें सी 1 नियंत्रण वर्ण शामिल हैं।

8

पार्टी के लिए बहुत देर हो चुकी है, लेकिन यह regexp काम करता है: /[ -~]/

कैसे? यह स्पेस (ASCII DEC 32) से tilde (ASCII DEC 126) से सभी वर्णों से मेल खाता है, जो सभी प्रिंट करने योग्य पात्रों की सीमा है।

$someString.replace(/[^ -~]/g, ''); 

नोट::

आप गैर- ASCII वर्ण उन्हें हटाना चाहते हैं, तो आप की तरह कुछ इस्तेमाल कर सकते हैं इस वैध .net कोड नहीं है, लेकिन जो लोग खोज के माध्यम से इस पर ठोकर के लिए regexp उपयोग का एक उदाहरण है इंजन बाद में।

0

@ एलन-मूर, \P{Cc} पर जोड़ना वास्तव में Negative Unicode Category or Unicode Block (रेफरी: Character Classes in Regular Expressions) का उदाहरण है। \P{name} किसी भी चरित्र से मेल खाता है जो से यूनिकोड सामान्य श्रेणी या नामित ब्लॉक से संबंधित नहीं है। .NET

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

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