नियमित अभिव्यक्ति के साथ हाइफ़न का मिलान कैसे करें?


83

[a-zA-Z0-9!$* \t\r\n]मौजूदा वर्णों के साथ हाइफ़न के मिलान के पैटर्न को कैसे फिर से लिखना है ?


स्थान और \ t जोड़ने के बजाय आप \ s जोड़ सकते हैं। अन्य प्रकार के श्वेत स्थानों से भी मेल खाता है
राडु सिमियोनेस्कु

जवाबों:


72

हाइफ़न बच।

[a-zA-Z0-9!$* \t\r\n\-]

अद्यतन करें :
कभी भी इस उत्तर पर ध्यान न दें - आप हाइफ़न को समूह में जोड़ सकते हैं लेकिन आपको इससे बचना नहीं है। इसके बजाय कोनराड रूडोल्फ का जवाब देखें जो जवाब देने और समझाने का बेहतर काम करता है।


ओह यह है? क्या इसलिए कि यह एक चरित्र समूह में है? मेरी गलती।
नील बार्नवेल

11
@KonradRudolph आप सही हैं, लेकिन मुझे यकीन नहीं है कि unescaped संस्करण को समझना आसान है। डैश के दो संभावित उपयोग भ्रमित कर रहे हैं, यही कारण है कि इसके साथ शुरू करने के लिए सवाल हैं। एक बार जब आप इसके बारे में जानते हैं तो यह निश्चित रूप से अधिक सुरुचिपूर्ण है, लेकिन शुरुआती लोगों के लिए यह थोड़ा भ्रमित है।
क्रिस्टोफ रूसो

186

नियमित अभिव्यक्तियों में आमतौर पर हाइफ़न एक सामान्य चरित्र है। केवल अगर यह एक चरित्र वर्ग में है और दो अन्य पात्रों के बीच यह एक विशेष अर्थ लेता है।

इस प्रकार:

  • [-] एक हाइफ़न से मेल खाता है।
  • [abc-]मैचों a, b, cया कोई हाइफ़न।
  • [-abc]मैचों a, b, cया कोई हाइफ़न।
  • [ab-d]मैच a, या b, ( केवल यहाँ हाइफ़न एक वर्ण श्रेणी को दर्शाता है)।cd

1
@rrr आप चाहते हैं कि वह इसे आपके लिए लिखे और साथ ही इसे वर्तनी के लिए लिखे? आपको केवल समूह में हाइफ़न जोड़ने की आवश्यकता है।
नील बार्नवेल

10
@rrrr: मुझे विश्वास है कि मैंने एक उत्तर दिया है। सवाल यह था कि "एक्स 'कैसे लिखा जाए ..." और मुझे विश्वास है कि मैंने समझाया है कि यह कैसे करना है। मेरे उत्तर को लेते हुए और स्पष्टीकरण को वास्तविक अभिव्यक्ति के लिए लागू करने के लिए पहले-ग्रेडर की आवश्यकता से अधिक संज्ञानात्मक कौशल की आवश्यकता नहीं होनी चाहिए। वास्तव में, यह वही है जो पहले-ग्रेडर तब सीखते हैं जब उन्हें बुनियादी अंकगणित सिखाया जाता है। मेरी धारणा को सही करने के लिए स्वतंत्र महसूस करें।
कोनराड रूडोल्फ


2
@MarkP खैर, duh: चरित्र हेक्स कोड फ्रंट-एंड पार्सर (C #, या जावास्क्रिप्ट, या जो भी भाषा आप उपयोग कर रहे हैं) द्वारा वास्तविक चरित्र में परिवर्तित किए जाते हैं। तो हेक्स कोड का उपयोग करना वास्तविक पात्रों का उपयोग करने के समान है जहां तक ​​स्ट्रिंग के मूल्य का संबंध है।
कोनराड रुडोल्फ

1
@Phemo बेशक, बेवकूफ गलती। इसमें व्याख्या के बारे में [a-c-e]: यह कुछ रेगेक्स विनिर्देशों / इंजनों में बस अमान्य है। उदाहरण के लिए POSIX regex इसे नापसंद करता है।
कोनराड रुडोल्फ

13

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

लेकिन विचार करने के लिए कुछ और है। उन प्रगणित वर्णों में से कुछ को संभवतः अलग तरह से लिखा जाना चाहिए। कुछ परिस्थितियों में, उन्हें निश्चित रूप से करना चाहिए।

रेगेक्स फ्लेवर की यह तुलना कहती है कि C of कुछ सरल यूनिकोड गुणों का उपयोग कर सकता है। यदि आप यूनिकोड के साथ काम कर रहे हैं, तो आपको संभवतः \p{L}सभी संभावित पत्रों के लिए सामान्य श्रेणी का उपयोग करना चाहिए , और शायद \p{Nd} दशमलव संख्याओं के लिए। इसके अलावा, यदि आप सभी डैश विराम चिह्न को समायोजित करना चाहते हैं, न कि केवल HYPHEN-MINUS, तो आपको \p{Pd}संपत्ति का उपयोग करना चाहिए । आप यह भी कह सकते हैं कि व्हॉट्सएप के पात्रों का वह क्रम बस के रूप में लिखना \s, यह मानते हुए कि आपके लिए बहुत सामान्य नहीं है।

सभी एक साथ, [\p{L}\p{Nd}\p{Pd}!$*]उस सेट से किसी एक वर्ण से मेल खाने के लिए काम करने के लिए क्षमा याचना करते हैं।

मैं वैसे भी इसका उपयोग करने की संभावना रखता हूं, भले ही मैंने पूर्ण यूनिकोड सेट से निपटने की योजना नहीं बनाई हो, क्योंकि यह एक अच्छी आदत है, और क्योंकि ये चीजें अक्सर अपने मूल मापदंडों से परे बढ़ती हैं। अब जब आप इसे अन्य कोड में उपयोग करने के लिए उठाते हैं, तब भी यह सही तरीके से काम करेगा। यदि आप सभी वर्णों को हार्ड कोड करते हैं, तो यह नहीं होगा।


मैं इस जवाब से सहमत हूँ, आपको कोड को जानने की आवश्यकता कम है। यह मुझे समस्या संचालकों की प्राथमिकताओं की याद दिलाता है: stackoverflow.com/questions/10007140/… , मैं उन में कोष्ठक होने का अनुमान लगाता हूं (स्वचालित रूप से मेरी आईडीई द्वारा जोड़ा गया), उन सभी को जानने की आवश्यकता नहीं है। आप या कोई और जल्द या बाद में गड़बड़ कर सकता है। यदि आप अपनी परियोजनाओं में रेगेक्स के साथ बहुत काम करते हैं, तो आपको अधिक उन्नत ज्ञान रखने की आवश्यकता हो सकती है।
क्रिस्टोफ रूसो

4

[-a-z0-9] +, [a-z0-9 -] +, [az-०- ९] + और भी [az-०-९] + सभी एक ही हैं। दो श्रेणियों के बीच हाइफ़न एक के रूप में माना जाता है प्रतीक। और यह भी [a-z0-9 - + ()] + यह रेगेक्स हाइफ़न की अनुमति देता है।


सबसे अच्छे उत्तरों में से एक होना चाहिए।
रेजर की बढ़त


1

किसी भी प्रकार की हाइफ़न से मेल खाने के लिए बिना उद्धरण के "\ p {Pd}" का उपयोग करें। '-' वर्ण सिर्फ एक प्रकार का हाइफ़न है जो रेगेक्स में एक विशेष चरित्र भी होता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.