2009-06-11 12 views
27
[^\x20-\x7E] 

में मैंने देखा कि एक रेगुलर एक्सप्रेशन जिसमें लक्ष्य एक स्ट्रिंग से गैर- ASCII पात्रों को दूर करने के था के लिए इस्तेमाल का उद्देश्य। इसका क्या मतलब है?[^ x20- x7E] इस पैटर्न नियमित अभिव्यक्ति

उत्तर

35

इसे कहते हैं की तरह कुछ: सभी वर्णों कि सीमा \x20-\x7E (हेक्स 0x7E करने के लिए 0x20) में नहीं (^) कर रहे हैं।

http://www.asciitable.com/ के अनुसार, वे अंतरिक्ष से ~ के पात्र हैं।

+8

यानी प्रिंट करने योग्य पात्र – annakata

+0

यह ध्यान रखना अच्छा है कि आप जांच करने के लिए एपीआई का भी उपयोग कर सकते हैं। उदाहरण के लिए, जावा में आप java.lang.Character.isISOControl (वर्ण) और इसी तरह के तरीकों का उपयोग कर सकते हैं जो आपके कोड को और अधिक पठनीय बनाते हैं। – Stan

2

इसका मतलब है "कुछ भी जो हेक्साडेसिमल रेंज 0x20 से 0x7E में वर्ण कोड नहीं है, यानी 32 से 126"।

2

ब्रैकेट के अंदर कैरेट (^) का अर्थ है "[") का अर्थ है "नहीं", और \ x20- \ x7E एएससीआई अक्षरों की एक श्रृंखला को दर्शाता है, जहां \ x20 (स्पेस) श्रेणी की शुरुआत है, और \ x7E (~) अंत है। यह मूल रूप से कुछ भी है जो एक अक्षर, संख्या, या सामान्य विराम चिह्न नहीं है।

5

इसका मतलब यह है कि किसी भी वर्ण से मिलान करें जो वर्णों को प्रिंट नहीं कर रहा है।

मुद्रण वर्ण, z, A से Z, 0 9 और जैसे "प्रतीक को करने के लिए एक में शामिल हैं, $ #% आदि

^ not 
\x20 hex code for space character 
- to 
\x7e hex code for ~ (tilde) character 

सभी ascii मुद्रण वर्ण इन दोनों के बीच गिर

यह बयान गैर ASCII वर्ण के साथ-साथ ascii नियंत्रण (गैर मुद्रण) इस तरह की घंटी, टैब, अशक्त और दूसरों के रूप में वर्ण।

man ascii 
पर देखो से मेल खाता है

एक यूनिक्स सिस्टम पर यह देखने के लिए कि कौन से वर्ण मेल खाते हैं।

पर्ल में, आप भी इस रूप में

[^ -~] 

या

[[:^cntrl:]] 

यह पिछले एक थोड़ा अलग है कि यह विस्तारित ascii सहित किसी भी गैर नियंत्रण चरित्र, मैच लिख सकता है, (उदाहरण के लिए उच्चारण चिह्न पात्र) और यूनिकोड।

आप अपने आप को केवल एसीआईआई तक सीमित नहीं करना चाहते हैं, क्योंकि गैर अमेरिकी स्थान अक्सर इस छोटी सी सीमा के बाहर वैध प्रिंटिंग वर्णों का उपयोग करते हैं, उदाहरण के लिए øüéåç ...

+0

मुझे लगता है कि आप का मतलब है [^ [: प्रिंट:]] उस आखिरी के लिए। पॉज़िक्स कैरेक्टर क्लास नोटेशन में स्क्वायर ब्रैकेट्स के साथ-साथ कॉलन भी शामिल हैं, और पूरी चीज को स्क्वायर ब्रैकेट के दूसरे सेट के अंदर रखा जाना चाहिए। (और निश्चित रूप से, [: cntrl:] गलत वर्ग है।) हालांकि, POSIX कक्षाओं को लोकेल-संवेदनशील भी माना जाता है, जिसका अर्थ है कि वे मिलान कर सकते हैं, उदाहरण के लिए, उच्चारण अक्षरों के साथ-साथ मूल ASCII सेट भी। –

+0

आह हाँ, वह मैला था (देर हो चुकी थी)। cntrl वास्तव में पिछले लोगों के लिए अलग है, इस अर्थ में कि इसमें विस्तारित एसीआई और यहां तक ​​कि यूनिकोड श्रेणियों में प्रिंटिंग वर्ण शामिल होंगे, लेकिन मेरा मानना ​​है कि यह संभवतः यही था। –

+0

मैं अकेले पॉज़िक्स चरित्र कक्षाओं को छोड़ने की सलाह दूंगा, खासतौर से इस तरह के मामले में, जहां हम नहीं जानते कि कौन सा रेगेक्स स्वाद का उपयोग किया जा रहा है, जो ओएस चल रहा है, या किस लोकेल में। वे सभी कारक उनके व्यवहार को बदल सकते हैं। –

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