2012-03-06 13 views
136

संभव डुप्लिकेट:रेगेक्स - क्या हाइफ़न बच निकलेगा?

[0-9A-F] 

लेकिन:
How to match hyphens with Regular Expression?

हाइफन, उदाहरण के लिए, श्रेणी का चयन करने के लिए regex में विशेष वर्ण है, मैं की तरह कुछ कर सकता है स्क्वायर ब्रैकेट के बाहर यह सिर्फ एक नियमित चरित्र सही है? मैंने इसे दो ऑनलाइन रेगेक्स टेस्टर्स पर परीक्षण किया है, और हाइफ़न स्क्वायर ब्रैकेट के बाहर एक सामान्य चरित्र के रूप में काम करते हैं (या यहां तक ​​कि स्क्वायर ब्रैकेट के अंदर भी यदि यह दो अक्षरों के बीच नहीं है - उदाहरण के लिए [-g] मिलान करना प्रतीत होता है - या जी) चाहे वह बच निकला है या नहीं। मुझे इसका जवाब नहीं मिला, लेकिन मैं सोच रहा हूं कि हाइफ़न से बचने के लिए पारंपरिक है या नहीं।

धन्यवाद!

+5

यह इस बात पर निर्भर करता है कि आप अनियमित अभिव्यक्तियों का प्रतिनिधित्व करने के लिए किस भाषा का उपयोग करते हैं। – zzzzBov

+3

यहां एक समान पोस्ट है जो आपके सवालों का जवाब देनी चाहिए: http://stackoverflow.com/a/4068725/56829 –

+4

मुझे नहीं पता कि यह एक सटीक डुप्लिकेट कैसे है। वह सवाल हाइफ़न से बचने के लिए कह रहा है। मैं पहले से ही जानता हूं कि उन्हें कैसे बचें और पूछें कि उन्हें भागने के लिए जरूरी है।तथ्य यह है कि कुछ उत्तर ओवरलैप अप्रासंगिक है क्योंकि प्रश्नों की प्रकृति अलग-अलग हैं। कृपया पुनः खोलें – JSideris

उत्तर

198

सभी मोर्चों पर सही। एक चरित्र वर्ग के बाहर (यही है कि "वर्ग कोष्ठक" कहा जाता है) हाइफ़न का कोई विशेष अर्थ नहीं है, और एक चरित्र वर्ग के भीतर, आप सीमा में पहले या अंतिम चरित्र के रूप में एक हाइफ़न डाल सकते हैं (उदाहरण के लिए [-a-z] या [0-9-]), या अपनी कक्षा में "हाइफ़न" जोड़ने के लिए इसे से बचें (उदाहरण के लिए [a-z\-0-9])।

एक चरित्र वर्ग के भीतर पहले या आखिरी बार एक हाइफ़न ढूंढना आम बात है, लेकिन इसके बजाय आप इसे बचने के लिए उग्र गर्दन के घोंसले से नहीं घूमते हैं।

(असल में ... मेरा अनुभव यह रहा है कि बहुत सारे रेगेक्स उन लोगों द्वारा नियोजित किए जाते हैं जो सिंटैक्स को पूरी तरह से ग्रोक नहीं करते हैं। इन मामलों में, आप आम तौर पर बच निकले सब कुछ देखेंगे (उदाहरण के लिए [a-z\%\$\#\@\!\-\_]) बस इंजीनियर पता नहीं है कि "विशेष" क्या है और क्या नहीं है ... इसलिए वे "इसे सुरक्षित खेलते हैं" और अत्यधिक बैकस्लाश के भार के साथ अभिव्यक्ति को खराब कर देते हैं। आप स्वयं को, अपने समकालीन, और आपकी वंशावली को एक बड़ा पक्ष ले कर एक बड़ा पक्ष ले लेंगे इसका उपयोग करने से पहले वास्तव में रेगेक्स वाक्यविन्यास को समझने का समय।)

महान प्रश्न!

+3

उन लोगों द्वारा अत्यधिक भागने के बारे में दिलचस्प बिंदु जो पूरी तरह से समझ नहीं पाते हैं और "इसे सुरक्षित खेलना" चाहते हैं – Medorator

+9

+1 "मुझे गुस्सा गर्दन के घोंसले" की मानसिकता को समझने में मदद करने के लिए +1: डी –

+2

एक बहुत ही उपयोगी उत्तर। एक्लिप्स लुना में यह पता चला है कि जावा लिंटर शिकायत करेगा अगर आप इसे से बचने की कोशिश करते हैं। – Keab42

5

आमतौर पर आप हमेशा [] मिलान अनुभाग में हाइफ़न डाल देंगे। ईजी, हाइफ़न (लंबा रास्ता लिखित) सहित किसी भी अल्फान्यूमेरिक मिलान करने के लिए, आप चरित्र वर्गों के [-a-zA-Z0-9]

10

बाहर का प्रयोग करेंगे, यह हाइफ़न नहीं से बचने के लिए पारंपरिक है। अगर मैंने एक चरित्र वर्ग के बाहर एक भागने वाले हाइफ़न को देखा, तो यह मुझे सुझाव देगा कि यह किसी ऐसे व्यक्ति द्वारा लिखा गया था जो regexes के साथ बहुत सहज नहीं था।

चरित्र वर्गों के अंदर, मुझे नहीं लगता कि एक तरफ एक तरफ परंपरागत है; मेरे अनुभव में, आमतौर पर बैकस्लैश से बचने के लिए [-._:] यामें पहले या आखिरी बार रखना है; लेकिन मैंने इसे अक्सर [._\-:] में से भी बच निकला है, और मैं un पारंपरिक नहीं कहूंगा।

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