मुखपृष्ठ » कैसे » बेहतर और समय बचाने के लिए बुनियादी नियमित अभिव्यक्तियों का उपयोग कैसे करें

    बेहतर और समय बचाने के लिए बुनियादी नियमित अभिव्यक्तियों का उपयोग कैसे करें

    चाहे आप जीआरपी के साथ खोज कर रहे हों या उन कार्यक्रमों को देख रहे हों जो आपके लिए फ़ाइलों का नाम बदल सकते हैं, आपने शायद सोचा है कि क्या आपका काम करने का एक आसान तरीका है। शुक्र है, वहाँ है, और यह "नियमित अभिव्यक्ति" कहा जाता है।

    (XKCD.com से कॉमिक)

    रेगुलर एक्सप्रेशन क्या हैं?

    नियमित अभिव्यक्तियाँ बहुत विशिष्ट तरीके से व्यक्त किए गए कथन हैं और यह कई अलग-अलग परिणामों के लिए खड़े हो सकते हैं। "रेगेक्स" या "रेगेक्सपी" के रूप में भी जाना जाता है, वे मुख्य रूप से खोज और नामकरण कार्यों को दर्ज करने में उपयोग किए जाते हैं। एक regex का उपयोग विभिन्न संभावित आउटपुट बनाने के लिए एक सूत्र की तरह किया जा सकता है, जिसकी सभी खोज की जाती है। वैकल्पिक रूप से, आप निर्दिष्ट कर सकते हैं कि एक रेगेक्स को निर्दिष्ट करके फ़ाइलों का एक समूह कैसे रखा जाना चाहिए, और आपका सॉफ़्टवेयर अगले इच्छित आउटपुट पर जा सकता है। इस तरह, आप बहुत आसानी से और कुशलता से कई फ़ोल्डरों में कई फ़ाइलों का नाम बदल सकते हैं, और आप एक सरल नंबरिंग सिस्टम की सीमाओं से आगे बढ़ सकते हैं.

    क्योंकि नियमित अभिव्यक्तियों का उपयोग एक विशेष वाक्यविन्यास पर निर्भर करता है, इसलिए आपका प्रोग्राम उन्हें पढ़ने और पार्स करने में सक्षम होना चाहिए। विंडोज और ओएस एक्स के लिए कई बैच फ़ाइल का नाम बदलने के कार्यक्रमों में रीजैक्स के लिए समर्थन है, साथ ही क्रॉस-प्लेटफ़ॉर्म सर्चिंग टूल जीआरपी (जिसे हमने अपनी बैश स्क्रिप्टिंग फॉर बिगिनर्स गाइड में छुआ है) और अवीक कमांड-लाइन टूल फॉर निक्स। इसके अलावा, कई वैकल्पिक फ़ाइल प्रबंधक, लांचर, और खोज उपकरण उनका उपयोग करते हैं, और उनका पर्ल और रूबी जैसी प्रोग्रामिंग भाषाओं में बहुत महत्वपूर्ण स्थान है। अन्य विकास वातावरण जैसे .NET, जावा और पायथन, साथ ही आगामी C ++ 11, सभी नियमित अभिव्यक्ति का उपयोग करने के लिए मानक पुस्तकालय प्रदान करते हैं। जैसा कि आप कल्पना कर सकते हैं, वे वास्तव में उपयोगी हो सकते हैं जब आप एक कार्यक्रम में रखे गए कोड की मात्रा को कम करने की कोशिश कर रहे हों.

    अक्षर से बचने के बारे में एक नोट

    इससे पहले कि हम आपको उदाहरणों के साथ दिखाएं, हम कुछ बताना चाहेंगे। हम आपको नियमित अभिव्यक्ति लागू करने के तरीके दिखाने के लिए बैश शेल और grep कमांड का उपयोग करने जा रहे हैं। समस्या यह है कि कभी-कभी हम विशेष वर्णों का उपयोग करना चाहते हैं जिन्हें grep को पारित करने की आवश्यकता होती है, और बैश शेल उस वर्ण की व्याख्या करेगा क्योंकि शेल इसका उपयोग करता है। इन परिस्थितियों में, हमें इन पात्रों को "बच" चाहिए। यह भ्रामक हो सकता है क्योंकि वर्णों का यह "बचना" भी रेगेक्स के अंदर होता है। उदाहरण के लिए, यदि हम इसे grep में दर्ज करना चाहते हैं:

    \<

    हमें उस के साथ प्रतिस्थापित करना होगा:

    \\\<

    यहाँ प्रत्येक विशेष चरित्र को एक बैकस्लैश मिलता है। वैकल्पिक रूप से, आप एकल उद्धरणों का भी उपयोग कर सकते हैं:

    '\<'

    एकल उद्धरण बश को यह बताने के लिए नहीं कि उनके अंदर क्या है। जबकि हमें इन चरणों को लेने की आवश्यकता है, इसलिए हम आपके लिए, आपके कार्यक्रमों (विशेष रूप से जीयूआई-आधारित) को अक्सर इन अतिरिक्त चरणों की आवश्यकता नहीं कर सकते हैं। चीजों को सरल और सीधा रखने के लिए, वास्तविक नियमित अभिव्यक्ति आपको उद्धृत पाठ के रूप में दी जाएगी, और आप कमांड-लाइन स्क्रीनशॉट में बच गए सिंटैक्स को देखेंगे।.

    वे कैसे विस्तार करते हैं?

    Regexps बताते हुए शब्दों का एक बहुत संक्षिप्त तरीका है ताकि आपका कंप्यूटर उन्हें कई विकल्पों में विस्तारित कर सके। आइए निम्नलिखित उदाहरण पर एक नज़र डालें:

    टॉम [0123456789]

    वर्ग कोष्ठक - [और] - पार्सिंग इंजन को बताएं कि जो कुछ भी अंदर है, किसी एक वर्ण का उपयोग मैच के लिए किया जा सकता है। उन कोष्ठकों के अंदर जो कुछ भी है उसे वर्ण सेट कहा जाता है.

    इसलिए, यदि हमारे पास प्रविष्टियों की एक विशाल सूची है और हमने इस regex का उपयोग खोज के लिए किया है, तो निम्नलिखित शब्दों का मिलान किया जाएगा:

    • टॉम
    • tom0
    • tom1
    • tom2
    • tom3

    और इसी तरह। हालाँकि, निम्न सूची का मिलान नहीं किया जाएगा, और इसलिए यह आपके परिणामों में दिखाई नहीं देगा:

    • टमाटर ; रेगेक्स "टॉम" के बाद किसी भी पत्र के लिए खाता नहीं है
    • टॉम; रेगेक्स मामला संवेदनशील है!

    आप किसी अवधि (।) के साथ खोज करना चुन सकते हैं, जो किसी भी वर्ण को तब तक मौजूद रहने देगा, जब तक कि कोई वर्ण मौजूद है.

    जैसा कि आप देख सकते हैं, साथ grepping

    .टॉम

    शुरुआत में केवल "टॉम" वाले शब्द नहीं लाए। यहां तक ​​कि "हरी टमाटर" भी आया, क्योंकि "टॉम" से पहले की जगह एक चरित्र के रूप में गिना जाता है, लेकिन "टॉमएफ" जैसे शब्दों की शुरुआत में एक चरित्र नहीं था और इस तरह से अनदेखा किया गया था.

    नोट: ग्रेप का डिफ़ॉल्ट व्यवहार पाठ की एक पूरी पंक्ति को वापस करने के लिए है जब कुछ भाग आपके रेगेक्स से मेल खाता है। अन्य कार्यक्रम ऐसा नहीं कर सकते हैं, और आप इसे '-ओ' ध्वज के साथ grep में बंद कर सकते हैं.

    आप यहां एक पाइप (!) का उपयोग करके वैकल्पिककरण भी निर्दिष्ट कर सकते हैं:

    विशेषज्ञ (रों | z) ई

    यह दोनों मिल जाएगा:

    • विशेषज्ञ
    • विशेषज्ञ

    Grep कमांड का उपयोग करते समय, हमें बैकस्लैश के साथ-साथ विशेष वर्ण (,। और) से बचने की आवश्यकता होती है, साथ ही इसे पाने के लिए '-E' ध्वज का उपयोग करें और बदसूरत त्रुटियों से बचें.

    जैसा कि हमने ऊपर उल्लेख किया है, यह इसलिए है क्योंकि हमें इन पात्रों को टटोलने के लिए पास करने के लिए बैश शेल को बताने और उनके साथ कुछ भी नहीं करने की आवश्यकता है। '-ई' ध्वज ग्रीप को कोष्ठक और पाइप को विशेष वर्ण के रूप में उपयोग करने के लिए कहता है.

    आप एक वर्गाकार कोष्ठक के अंदर और एक सेट की शुरुआत में दोनों को शामिल करके खोज कर सकते हैं:

    टॉम [^ एफ | 0-9]

    फिर से, यदि आप grep और bash का उपयोग कर रहे हैं, तो उस पाइप से बचकर भागना याद रखें!

    सूची में जो शर्तें थीं, लेकिन दिखाई नहीं गईं वे हैं:

    • tom0
    • tom5
    • tom9
    • tomF

    ये हमारे रेगेक्स से मेल नहीं खाते थे.

    मैं वातावरण का उपयोग कैसे कर सकता हूं?

    अक्सर, हम सीमाओं के आधार पर खोज करते हैं। कभी-कभी हम केवल ऐसे तार चाहते हैं जो किसी शब्द की शुरुआत में, किसी शब्द के अंत में, या कोड की एक पंक्ति के अंत में दिखाई देते हैं। यह आसानी से किया जा सकता है जिसे हम एंकर कहते हैं.

    कैरेट (कोष्ठक के बाहर) का उपयोग करना आपको एक पंक्ति के "आरंभ" को नामित करने की अनुमति देता है.

    ^ टॉम

    एक पंक्ति के अंत की खोज करने के लिए, डॉलर के चिह्न का उपयोग करें.

    टॉम $

    आप देख सकते हैं कि इस मामले में हमारी खोज स्ट्रिंग लंगर से पहले आती है.

    आप उन मैचों के लिए भी हो सकते हैं जो शब्दों की शुरुआत या अंत में दिखाई देते हैं, न कि पूरी लाइनों पर.

    \

    टॉम \>

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

    परिणाम एक ही हैं। सुनिश्चित करें कि आप एकल उद्धरणों का उपयोग करते हैं, न कि दोहरे उद्धरण चिह्नों का.

    उन्नत रेगेक्स के लिए अन्य संसाधन

    हमने यहां केवल हिमशैल के टिप को मारा है। आप मुद्रा मार्कर द्वारा विलंबित धन शर्तों को भी खोज सकते हैं, और किसी भी तीन या अधिक मिलान शब्दों को खोज सकते हैं। चीजें वास्तव में जटिल हो सकती हैं। यदि आप नियमित अभिव्यक्ति के बारे में अधिक जानने में रुचि रखते हैं, तो कृपया निम्नलिखित स्रोतों पर एक नज़र डालें.

    • Zytrax.com के कुछ पृष्ठ हैं, जिनके विशिष्ट उदाहरण हैं कि चीजें क्यों मेल खाती हैं और मेल नहीं खातीं.
    • Regular-Expressions.info में बहुत अधिक उन्नत सामानों के साथ-साथ एक आसान संदर्भ पृष्ठ के लिए एक हत्यारा गाइड भी है.
    • Gnu.org के पास grep के साथ regexps का उपयोग करने के लिए समर्पित एक पृष्ठ है.

    आप RegExr नामक एक नि: शुल्क फ्लैश-आधारित ऑनलाइन टूल का उपयोग करके अपने नियमित अभिव्यक्तियों का निर्माण और परीक्षण भी कर सकते हैं। यह आपके टाइप करने के लिए काम करता है, मुफ्त है, और इसका उपयोग अधिकांश ब्राउज़रों में किया जा सकता है.


    क्या आपके पास नियमित अभिव्यक्ति के लिए पसंदीदा उपयोग है? एक महान बैच रेनमर का पता है जो उनका उपयोग करता है? हो सकता है कि आप बस अपने grep-fu के बारे में डींग मारना चाहते हों। कमेंट करके अपने विचार बताएं!