Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

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

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

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

आपको रेगेक्स क्यों सीखना चाहिए?

<पी> रेगेक्स आपको टेक्स्ट प्रोसेसिंग इस तरह से करने देता है जिससे आपका काफी समय बच सकता है। यह प्रक्रिया में कुछ मज़ा भी ला सकता है।

<पी> रेगेक्स का उपयोग करने से जानकारी का पता लगाना बहुत आसान हो सकता है। एक बार जब आपको अपना लक्ष्य मिल जाए, तो आप बैच एडिट/रीप्लेट/डिलीट या जो भी प्रोसेसिंग आपको करने की आवश्यकता हो, कर सकते हैं।

<पी> रेगेक्स का उपयोग करने के कुछ व्यावहारिक उदाहरण हैं बैच फ़ाइल का नाम बदलना, लॉग को पार्स करना, फ़ॉर्म को मान्य करना, कोडबेस में बड़े पैमाने पर संपादन करना और पुनरावर्ती खोज।

<पी> इस ट्यूटोरियल में, हम इस साइट की सहायता से रेगेक्स मूल बातें कवर करने जा रहे हैं। बाद में, मैं कुछ रेगेक्स चुनौतियों का परिचय दूंगा जिन्हें आप पायथन का उपयोग करके हल करेंगे। मैं आपको यह भी दिखाऊंगा कि sed जैसे टूल का उपयोग कैसे करें और grep रेगेक्स के साथ।

<पी> जीवन में कई चीज़ों की तरह, नियमित अभिव्यक्ति उन चीज़ों में से एक है जिन्हें आप केवल करके ही वास्तव में समझ सकते हैं। जब आप इस लेख को पढ़ रहे हों तो मैं आपको रेगेक्स के साथ खेलने के लिए प्रोत्साहित करता हूँ।

सामग्री तालिका

  • रेगेक्स मूल बातें
    • सटीक मिलान
    • अक्षर सेट
      • रेगेक्स में श्रेणियों का मिलान करें
      • सेट में मौजूद किसी भी अन्य वर्ण से मिलान करें
    • चरित्र वर्ग
    • क्वांटिफ़ायर
    • समूहों को कैप्चर करें
      • लॉजिकल या रेगेक्स में कैसे उपयोग करें
      • कैप्चर समूहों का संदर्भ कैसे दें
      • कैप्चर समूहों को नाम कैसे दें
  • कमांड लाइन टूल्स के साथ रेगेक्स का उपयोग कैसे करें
    • grep के साथ पुनरावर्ती रेगेक्स खोज
    • sed के साथ प्रतिस्थापन
  • उन्नत रेगेक्स:लुकअराउंड्स
    • पीछे देखें
    • लुकहेड्स
  • रेगेक्स के व्यावहारिक उदाहरण
    • लॉग पार्सिंग
    • बल्क फ़ाइल का नाम बदलना
    • ईमेल सत्यापन
    • पासवर्ड बाधाएं
  • अंतिम शब्द

रेगेक्स मूल बातें

<पी> रेगुलर एक्सप्रेशन और कुछ नहीं बल्कि वर्णों का एक क्रम है जो एक पैटर्न से मेल खाता है। शाब्दिक वर्णों (जैसे 'एबीसी') का उपयोग करने के अलावा, कुछ मेटा वर्ण (*,+,? इत्यादि) भी हैं जिनके विशेष उद्देश्य हैं। इसमें चरित्र वर्ग जैसी सुविधाएं भी हैं जो आपकी नियमित अभिव्यक्तियों को सरल बनाने में आपकी सहायता कर सकती हैं। <पी> किसी भी रेगेक्स को लिखने से पहले, आपको उस पैटर्न के सभी बुनियादी मामलों और किनारे के मामलों के बारे में सीखना होगा जिसे आप ढूंढ रहे हैं। <पी> उदाहरण के लिए, यदि आप 'हैलो वर्ल्ड' से मिलान करना चाहते हैं, तो क्या आप चाहते हैं कि पंक्ति 'हैलो' से शुरू हो या यह किसी भी चीज़ से शुरू हो सकती है? क्या आप 'हैलो' और 'वर्ल्ड' के बीच बिल्कुल एक स्थान चाहते हैं या और भी हो सकते हैं? क्या 'वर्ल्ड' के बाद अन्य पात्र आ सकते हैं या यह सिलसिला यहीं ख़त्म हो जाना चाहिए? क्या आप केस संवेदनशीलता की परवाह करते हैं? वगैरह.

<पी> ये ऐसे प्रश्न हैं जिनका उत्तर आपके पास अपना रेगेक्स लिखने के लिए बैठने से पहले होना चाहिए।

सटीक मिलान

<पी> रेगेक्स के सबसे बुनियादी रूप में वर्णों के अनुक्रम को उसी तरह से मिलान करना शामिल है जैसे आप टेक्स्ट एडिटर में Ctrl-F के साथ कर सकते हैं।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> शीर्ष पर आप मिलानों की संख्या देख सकते हैं, और नीचे एक स्पष्टीकरण दिया गया है कि रेगेक्स वर्ण दर वर्ण किससे मेल खाता है।

वर्ण सेट

<पी> रेगेक्स वर्ण सेट आपको वर्णों के समूह में से किसी एक वर्ण का मिलान करने की अनुमति देता है। समूह वर्गाकार कोष्ठकों से घिरा हुआ है []। <पी> उदाहरण के लिए, t[ah]i "ताई" और "थी" से मेल खाता है। यहां 't' और 'i' निश्चित हैं लेकिन उनके बीच 'a' या 'h' हो सकता है।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

रेगेक्स में श्रेणियों का मिलान करें

<पी> कभी-कभी आप ऐसे वर्णों के समूह का मिलान करना चाह सकते हैं जो अनुक्रमिक प्रकृति के हों, जैसे कि कोई बड़ा अंग्रेज़ी अक्षर। लेकिन सभी 26 पत्र लिखना काफी कठिन होगा। <पी> रेगेक्स इस समस्या को श्रेणियों के साथ हल करता है। "-" एक रेंज ऑपरेटर के रूप में कार्य करता है। कुछ मान्य श्रेणियाँ नीचे दिखाई गई हैं:

रेंजमैच [ए-जेड]अपरकेस अक्षर[ए-जेड]लोअरकेस अक्षर[0-9]कोई भी अंक <पी> आप आंशिक श्रेणियां भी निर्दिष्ट कर सकते हैं, जैसे [b-e] 'bcde' या [3-6] में से किसी भी अक्षर से मेल खाने के लिए किसी भी संख्या '3456' से मिलान करने के लिए।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> आप किसी वर्ण सेट के अंदर केवल एक श्रेणी निर्दिष्ट करने तक सीमित नहीं हैं। आप एकाधिक श्रेणियों का उपयोग कर सकते हैं और उन्हें किसी अन्य अतिरिक्त वर्ण के साथ जोड़ भी सकते हैं। यहां, [3-6u-w;] '3456uvw' या अर्धविराम ';' में से किसी एक से मेल खाएगा।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

सेट में मौजूद किसी भी अक्षर से मिलान करें

<पी> यदि आप सेट के पहले '^' लगाते हैं, तो उलटा ऑपरेशन निष्पादित किया जाएगा। उदाहरण के लिए, [^A-Z0-9] बड़े अक्षरों और अंकों को छोड़कर किसी भी चीज़ से मेल खाएगा।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

चरित्र वर्ग

<पी> रेगेक्स लिखते समय, आपको कुछ समूहों जैसे अंकों का अक्सर और एक ही अभिव्यक्ति में कई बार मिलान करना होगा। <पी> तो उदाहरण के लिए, आप 'अक्षर-अंक-अक्षर-अंक' जैसे पैटर्न का मिलान कैसे करेंगे? <पी> अब तक आपने जो सीखा है, उससे आप [a-zA-Z]-[0-9]-[a-zA-z]-[0-9] प्राप्त कर सकते हैं . यह काम करता है, लेकिन आप देख सकते हैं कि जैसे-जैसे पैटर्न की लंबाई बड़ी होती जाती है, अभिव्यक्ति कितनी गड़बड़ हो सकती है।

<पी> अभिव्यक्ति को सरल बनाने के लिए, कक्षाओं को अंकों जैसे अच्छी तरह से परिभाषित वर्ण समूहों को सौंपा गया है। निम्न तालिका इन वर्गों और वर्ण सेटों के साथ उनकी समकक्ष अभिव्यक्ति को दर्शाती है:

ClassMatchesसमतुल्य अभिव्यक्ति .न्यूलाइन को छोड़कर कुछ भी[^\n\r]\wword कैरेक्टर[a-zA-Z0-9_]\Wnon-word कैरेक्टर[^\w]\ddigits[0-9]\Dnon-digits[^\d]\sspace, टैब, न्यूलाइन्स[ \t\r\n\f]\Snon व्हाइटस्पेस कैरेक्टर[^\s] <पी> चरित्र वर्ग काफी उपयोगी हैं और आपकी अभिव्यक्ति को अधिक साफ-सुथरा बनाते हैं। हम उन्हें इस पूरे ट्यूटोरियल में बड़े पैमाने पर उपयोग करेंगे, ताकि आप इस तालिका को संदर्भ बिंदु के रूप में उपयोग कर सकें और यदि आप कोई भी कक्षा भूल जाएं तो यहां वापस आ सकें।

<पी> अधिकांश समय, हम एक पैटर्न में सभी स्थितियों की परवाह नहीं करेंगे। "।" क्लास हमें एक सेट में सभी संभावित अक्षर लिखने से बचाता है। <पी> उदाहरण के लिए, t.. टी और उसके बाद के किसी भी दो अक्षर से शुरू होने वाली किसी भी चीज़ से मेल खाता है। यह आपको SQL LIKE की याद दिला सकता है ऑपरेटर जो t%% का उपयोग करेगा उसी चीज़ को पूरा करने के लिए.

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

क्वांटिफायर

<पी> शब्द "पैटर्न" और "पुनरावृत्ति" साथ-साथ चलते हैं। यदि आप 3 अंकों की संख्या का मिलान करना चाहते हैं तो आप \d\d\d का उपयोग कर सकते हैं . लेकिन अगर आपको 11 अंकों का मिलान करना हो तो क्या होगा? आप '\d' को 11 बार लिख सकते हैं, लेकिन रेगेक्स लिखते समय या किसी भी प्रकार की प्रोग्रामिंग करते समय अंगूठे का एक सामान्य नियम यह है कि यदि आप खुद को किसी चीज़ को दो बार से अधिक दोहराते हुए पाते हैं, तो आप शायद कुछ विशेषताओं से अनजान हैं। <पी> रेगेक्स में, आप इस उद्देश्य के लिए क्वांटिफायर का उपयोग कर सकते हैं। 11 अंकों का मिलान करने के लिए, आप बस अभिव्यक्ति \d{11} लिख सकते हैं .

<पी> नीचे दी गई तालिका उन क्वांटिफायरों को सूचीबद्ध करती है जिनका उपयोग आप रेगेक्स में कर सकते हैं:

क्वांटिफायरमैच *0 या अधिक?0 या 1+1 या अधिक{n}बिल्कुल n बार{n, }n या अधिक बार{n, m}n से m बार सम्मिलित <पी> इस उदाहरण में, अभिव्यक्ति can\s+write can से मेल खाता है उसके बाद 1 या अधिक रिक्त स्थान और उसके बाद write . लेकिन आप देख सकते हैं कि 'कैनराइट' \s+ के रूप में मेल नहीं खाता है इसका मतलब है कि कम से कम एक रिक्त स्थान का मिलान होना आवश्यक है। यह तब उपयोगी होता है जब आप ऐसे पाठ के माध्यम से खोज रहे हैं जो काटा नहीं गया है।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> क्या आप अनुमान लगा सकते हैं कि can\s?write क्या है मेल खाएगा?

समूहों को कैप्चर करें

<पी> कैप्चर समूह कोष्ठक () में संलग्न उप-अभिव्यक्तियाँ हैं। आपके पास किसी भी संख्या में कैप्चर समूह और यहां तक कि नेस्टेड कैप्चर समूह भी हो सकते हैं।

<पी> अभिव्यक्ति (The ){2} 'द' से दो बार मेल खाता है। लेकिन कैप्चर ग्रुप के बिना, अभिव्यक्ति The {2} 'द' के बाद 2 स्पेस का मिलान होगा, क्योंकि क्वांटिफायर को स्पेस कैरेक्टर पर लागू किया जाएगा न कि एक समूह के रूप में 'द' पर।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> आप कैप्चर समूहों के अंदर किसी भी पैटर्न का मिलान कर सकते हैं जैसा कि आप किसी वैध रेगेक्स के साथ करेंगे। यहां (is\s+){2} यदि यह 'is' पाता है तो मिलान करता है और इसके बाद दो बार 1 या अधिक रिक्त स्थान देता है।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

लॉजिकल या रेगेक्स में कैसे उपयोग करें

<पी> आप "|" का उपयोग कर सकते हैं एकाधिक पैटर्न से मेल खाने के लिए। This is (good|bad|sweet) 'यह' ' के बाद 'अच्छा' या 'बुरा' या 'मीठा' में से किसी एक से मेल खाता है।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> फिर, आपको यहां कैप्चर समूहों के महत्व को समझना चाहिए। इस बारे में सोचें कि अभिव्यक्ति This is good|bad|sweet क्या है मेल खाएगा?

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> कैप्चर ग्रुप के साथ, good|bad|sweet This is से अलग किया गया है . लेकिन यदि यह कैप्चर समूह के अंदर नहीं है, तो संपूर्ण रेगेक्स केवल एक समूह है। तो अभिव्यक्ति This is good|bad|sweet यदि स्ट्रिंग में 'यह अच्छा है' या 'बुरा' या 'मीठा' है तो मिलान होगा।

कैप्चर समूहों का संदर्भ कैसे दें

<पी> कैप्चर समूहों को उसी अभिव्यक्ति में या प्रतिस्थापन करते समय संदर्भित किया जा सकता है जैसा कि आप रिप्लेसमेंट टैब पर देख सकते हैं। <पी> अधिकांश उपकरण और भाषाएँ आपको nवें कैप्चर किए गए समूह को '\n' के साथ संदर्भित करने की अनुमति देते हैं। इस साइट में प्रतिस्थापन का संदर्भ देते समय '$n' का उपयोग किया जाता है। प्रतिस्थापन के लिए सिंटैक्स आपके द्वारा उपयोग किए जा रहे टूल या भाषा के आधार पर अलग-अलग होगा। उदाहरण के लिए, जावास्क्रिप्ट के लिए, यह '$n' है, जबकि पायथन के लिए यह '\n' है।

<पी> अभिव्यक्ति में (This) is \1 power , 'यह' कैप्चर किया जाता है और फिर '\1' के साथ संदर्भित किया जाता है, जो प्रभावी रूप से This is This power से मेल खाता है .

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

कैप्चर समूहों को नाम कैसे दें

<पी> आप अपने कैप्चर समूहों को सिंटैक्स (?<name>pattern) के साथ नाम दे सकते हैं और उन्हें \k<name> के साथ उसी अभिव्यक्ति में बैकरेफ़र करें . <पी> प्रतिस्थापन पर, संदर्भ $<name> द्वारा किया जाता है . यह जावास्क्रिप्ट के लिए वाक्यविन्यास है और विभिन्न भाषाओं में भिन्न हो सकता है। आप यहां अंतरों के बारे में जान सकते हैं। यह भी ध्यान दें कि यह सुविधा कुछ भाषाओं में उपलब्ध नहीं हो सकती है।

<पी> अभिव्यक्ति में (?<lang>[\w+]+) is the best but \k<lang> .* , पैटर्न [\w+]+ 'लैंग' नाम से कैप्चर किया गया है और \k<lang> के साथ बैकरेफ़र किया गया है . यह पैटर्न किसी भी शब्द वर्ण या '+' वर्ण से 1 या अधिक बार मेल खाएगा। .* रेगेक्स के अंत में किसी भी वर्ण का 0 या अधिक बार मिलान होता है। और अंत में प्रतिस्थापन पर, संदर्भ $<lang> द्वारा किया जाता है .

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> ऐसे अच्छे सीएलआई उपकरण उपलब्ध हैं जो आपको अपने टर्मिनल से रेगेक्स करने की सुविधा देते हैं। ये उपकरण आपका और भी अधिक समय बचाते हैं क्योंकि आप किसी भाषा में कोड लिखे बिना और फिर उसे संकलित या व्याख्या किए बिना आसानी से विभिन्न रेगेक्स का परीक्षण कर सकते हैं। <पी> कुछ प्रसिद्ध उपकरण grep, sed, और awk हैं। आइए कुछ उदाहरणों पर गौर करें ताकि आपको कुछ विचार मिल सकें कि आप इन उपकरणों का लाभ कैसे उठा सकते हैं।

grep के साथ पुनरावर्ती रेगेक्स खोज

<पी> आप ग्रेप के माध्यम से रेगेक्स की शक्ति निष्पादित कर सकते हैं। ग्रेप किसी फ़ाइल में पैटर्न खोज सकता है या पुनरावर्ती खोज कर सकता है।

<पी> यदि आप विंडोज़ पर हैं, तो आप विंगेट का उपयोग करके ग्रेप इंस्टॉल कर सकते हैं। इस कमांड को पॉवरशेल में चलाएँ:

winget install -e --id GnuWin32.Grep
<पी> मैं आपको अपने विश्वविद्यालय में सीटीएफ प्रतियोगिता के लिए बनाई गई चुनौती का समाधान दिखाऊंगा। <पी> चुनौती से जुड़ी फ़ाइल एक ज़िप फ़ाइल है जिसमें निर्देशिकाओं के कई स्तर और बहुत सारी फ़ाइलें शामिल हैं। प्रतियोगिता का नाम कोडरश ध्वज प्रारूप coderush{flag is here} के साथ था . तो आपको पैटर्न coderush{.*} खोजना होगा जो ध्वज प्रारूप coderush{any character here} से मेल खाएगा .

<पी> unzip ripG.zip से फ़ाइल को अनज़िप करें और इसमें cd ripG के साथ सीडी डालें .

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> इसमें 358 निर्देशिकाएँ और 8731 फ़ाइलें हैं। फ़ाइलों में पैटर्न को एक-एक करके खोजने के बजाय, आप इस प्रकार grep का उपयोग कर सकते हैं:

grep --color -R "coderush{.*}"
<पी> "-R" ध्वज पुनरावर्ती खोज को सक्षम बनाता है।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> आप यहां grep और इसके कमांड लाइन विकल्पों के बारे में अधिक जान सकते हैं

sed के साथ प्रतिस्थापन

<पी> आप रेगेक्स निर्दिष्ट करके टेक्स्ट फ़ाइलों पर सम्मिलन, विलोपन, प्रतिस्थापन करने के लिए sed का उपयोग कर सकते हैं। यदि आप विंडोज़ पर हैं, तो आप यहां से सेड प्राप्त कर सकते हैं। या यदि आप WSL का उपयोग करते हैं, तो grep और sed जैसे उपकरण पहले से ही उपलब्ध होंगे।

<पी> यह sed का सबसे आम उपयोग है:

sed 's/pattern/replacement/g' filename
echo "${text}" | sed 's/pattern/replacement/g'
<पी> यहां, सभी घटनाओं को प्रतिस्थापित करने के लिए विकल्प "जी" निर्दिष्ट किया गया है।

<पी> कुछ अन्य उपयोगी विकल्प -n हैं सभी लाइनों को प्रिंट करने के डिफ़ॉल्ट व्यवहार को दबाने के लिए और केवल उन लाइनों को प्रिंट करने के लिए g के बजाय p का उपयोग करना जो रेगेक्स से प्रभावित हैं।

<पी> आइए texts.txt की सामग्री पर एक नज़र डालें।

Hello rand chars World 56 rand chars
Henlo 52 rand chars W0rld rand chars
GREP rand chars Henlo 62 rand chars
Henlo 10 rand chars Henlo rand chars
GREP rand chars Henlo 45 rand chars
<पी> हमारा कार्य Henlo number को प्रतिस्थापित करना है Hello number के साथ केवल उन पंक्तियों में जहां "GREP" मौजूद है। इसलिए, हम पैटर्न Henlo ([0-9]+) खोज रहे हैं जो 'हेनलो' से मेल खाएगा जिसके बाद 1 या अधिक अंक होंगे और सभी अंक कैप्चर हो जाएंगे। तब हमारी प्रतिस्थापन स्ट्रिंग Hello \1 होगी - '\1' अंकों वाले कैप्चर समूह को संदर्भित कर रहा है।

<पी> इसे पूरा करने का एक तरीका उन लाइनों को ग्रेप करने के लिए grep का उपयोग करना होगा जिनमें "GREP" मौजूद है और फिर sed के साथ प्रतिस्थापन करें।

grep "GREP" texts.txt | sed -En 's/Henlo ([0-9]+)/Hello \1/p'
<पी> "-E" विकल्प विस्तारित रेगेक्स को सक्षम करता है जिसके बिना आपको कोष्ठकों से बचना होगा।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> या आप सिर्फ sed का उपयोग कर सकते हैं। /pattern/ का प्रयोग करें प्रतिस्थापन को केवल उन्हीं पंक्तियों पर प्रतिबंधित करना जहां पैटर्न मौजूद है।

sed -En '/GREP/ s/Henlo ([0-9]+)/Hello \1/p' texts.txt

उन्नत रेगेक्स:लुकअराउंड्स

<पी> लुकहेड्स और लुकबिहाइंड्स (एक साथ लुकअराउंड्स के रूप में जाना जाता है) रेगेक्स की विशेषताएं हैं जो आपको मैच में शामिल किए बिना किसी पैटर्न के अस्तित्व की जांच करने की अनुमति देती हैं।

<पी> आप उन्हें शून्य चौड़ाई के दावे के रूप में सोच सकते हैं - वे एक पैटर्न के अस्तित्व पर जोर देते हैं लेकिन मैच में किसी भी वर्ण का उपभोग नहीं करते हैं। ये बहुत शक्तिशाली विशेषताएं हैं, लेकिन ये कम्प्यूटेशनल रूप से महंगी भी हैं। इसलिए सुनिश्चित करें कि यदि आप उनका अक्सर उपयोग कर रहे हैं तो आप प्रदर्शन पर नज़र रखें।

पीछे देखें

<पी> मान लीजिए कि आप 'linux' शब्द का मिलान करना चाहते हैं, लेकिन आपके पास 2 शर्तें हैं।

  1. 'लिनक्स' आने से पहले 'जीएनयू' शब्द आना चाहिए। यदि किसी पंक्ति में 'लिनक्स' है लेकिन उसके पहले 'जीएनयू' नहीं है, तो हम उस पंक्ति को हटाना चाहते हैं।
  2. हम केवल linux का मिलान करना चाहते हैं और कुछ नहीं.
<पी> हम पहले से ही जानते हैं कि पहली शर्त को कैसे पूरा किया जाए। GNU.* किसी भी संख्या में वर्णों के बाद 'जीएनयू' से मेल खाएगा। फिर अंत में हम शब्द linux से मेल खाते हैं . यह सभी GNU-any-characters-linux से मेल खाएगा .

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> लेकिन हम GNU.* से मेल खाने से कैसे रोकें जबकि अभी भी पहली शर्त बरकरार है?

<पी> यहीं पर सकारात्मक लुकबैक आता है। आप किसी कैप्चर ग्रुप को ?<= के साथ उपसर्ग लगाकर सकारात्मक लुकबैक के रूप में चिह्नित कर सकते हैं। . इस उदाहरण में, अभिव्यक्ति (?<=GNU.*)linux बन जाती है .

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> अब केवल linux मिलान किया गया है और कुछ नहीं।

<पी> ध्यान दें कि अभिव्यक्ति (?<=GNU.*)linux और linux(?<=GNU.*) बिल्कुल वैसा ही व्यवहार करेगा. दूसरी अभिव्यक्ति में, यद्यपि linux लुकबैक से पहले, .* है 'जीएनयू' के बाद जो linux से मेल खाता है . इसका मतलब यह है कि यह पीछे वाले को संतुष्ट करता है। <पी> इसे सरल बनाने के लिए, पीछे देखे बिना पैटर्न के बारे में सोचें। पैटर्न GNU.* 'जीएनयू' और उसके बाद की किसी भी चीज़ से मेल खाएगा, हमारे मामले में linux से मेल खाएगा .

<पी> अब हम एक सामान्यीकृत कथन प्राप्त कर सकते हैं कि अभिव्यक्ति (?<=C)X पैटर्न X से मेल खाएगा - केवल तभी जब पैटर्न C, X से पहले आया हो (और C को मिलान में शामिल नहीं किया जाना चाहिए)।

<पी> आप पहली शर्त को उलट भी सकते हैं. उन पंक्तियों का मिलान करें जिनमें शब्द linux है केवल यदि GNU इसके पहले कभी नहीं आया. इसे नकारात्मक लुकबैक कहा जाता है। इस मामले में उपसर्ग ?<! है . पिछली अभिव्यक्ति का व्युत्क्रम (?<!GNU.*)linux होगा .

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

लुकहेड्स

<पी> जैसा कि आपने पिछले उदाहरण में देखा था, लुकहेड्स भी लुकबिहाइंड्स जैसे दावे हैं। अंतर केवल इतना है कि लुकबिहाइंड पहले दावा करता है और लुकहेड बाद में दावा करता है।

<पी> मान लीजिए कि आपके पास ये दो शर्तें हैं:

  1. मिलान Hello केवल यदि World इसके बाद कहीं आता है.
  2. केवल हेलो से मेल करें और कुछ नहीं।
<पी> सकारात्मक पूर्वानुमान के लिए उपसर्ग ?= है . अभिव्यक्ति Hello(?=.*World) दोनों शर्तें पूरी करेंगे. यह Hello.*World के समान है सिवाय इसके कि केवल Hello मिलान किया जाएगा जबकि Hello.*World 'हैलो', 'वर्ल्ड' और इनके बीच की किसी भी चीज़ से मेल खाएगा।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> सकारात्मक लुकबैक में उदाहरण के समान, अभिव्यक्तियाँ Hello(?=.*World) और (?=.*World)Hello समतुल्य हैं. क्योंकि .* 'विश्व' Hello से मेल खाने से पहले , पहली शर्त को पूरा करना।

<पी> आगे की ओर नकारात्मक दृष्टि पीछे की नकारात्मक दृष्टि का पूरक मात्र है। आप इसे ?! से पहले लगाकर उपयोग कर सकते हैं . (?!World)Hello Hello से मेल खाएगा केवल तभी जब कोई World न हो इसके बाद कहीं भी.

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> जब आप पैटर्न ऑपरेशनRegEx सकारात्मक दृष्टिकोण(?=C)X नकारात्मक लुकअहेड(?!C)X (?<=C)X के पीछे सकारात्मक नज़र (?<!C)X के पीछे नकारात्मक लुक

लॉग पार्सिंग

<पी> इस लॉग फ़ाइल में, ये वे पंक्तियाँ हैं जिनकी हमें परवाह है:

[1/10000] Train loss: 11.30368, Valid loss: 8.95446, Elapsed_time: 7.58941
[500/10000] Train loss: 0.96180, Valid loss: 0.20098, Elapsed_time: 82.48651
[1000/10000] Train loss: 0.04051, Valid loss: 0.11927, Elapsed_time: 156.86243
<पी> हमारा कार्य युगों में हानि की साजिश रचने जैसे उद्देश्यों के लिए प्रशिक्षण हानि और सत्यापन हानि को निकालना है। हमें 11.30368, 0.96180, 0.04051 जैसे प्रशिक्षण हानि मान निकालने की आवश्यकता है और उन्हें एक सरणी में रखें।

<पी> सभी प्रासंगिक मान 'Train loss:' के साथ उपसर्ग किए गए हैं ', इसलिए हम इसे अपने रेगेक्स में वैसे ही उपयोग कर सकते हैं जैसे यह है। फ़्लोट संख्याओं का मिलान करने के लिए हमें कुछ अंकों का मिलान करना होगा जिसके बाद ". होगा " और फिर उसके बाद और अंक। आप इसे \d+\.\d+ के साथ कर सकते हैं . क्योंकि हम इन नंबरों पर नज़र रखना चाहते हैं, उन्हें एक कैप्चर ग्रुप के अंदर होना चाहिए।

<पी> जैसे "।" रेगेक्स में इसका विशेष उद्देश्य होता है, जब आप "" का मिलान करना चाहते हैं। चरित्र आपको बैकस्लैश से बचना होगा। यह विशेष प्रयोजन वाले सभी पात्रों पर लागू होता है। लेकिन आपको किसी कैरेक्टर सेट के अंदर इससे बचना नहीं है।

<पी> कुल मिलाकर, प्रशिक्षण हानि निकालने की अभिव्यक्ति Train loss: (\d+\.\d+) है . हम Valid loss: (\d+\.\d+) के साथ सत्यापन हानि निकालने के लिए उसी तर्क का उपयोग कर सकते हैं .

<पी> पायथन का उपयोग करके इस जानकारी को निकालने का एक तरीका यहां दिया गया है:

import re
f = open("log_train.txt", "r").read()
train_loss = re.findall(r'Train loss: (\d+\.\d+)', f)
valid_loss = re.findall(r'Valid loss: (\d+\.\d+)', f)
train_loss = [float(i) for i in train_loss]
valid_loss = [float(i) for i in valid_loss]
print("train_loss =", train_loss)
print("")
print("valid_loss =", valid_loss)
<पी> जब एक कैप्चर समूह होता है, re.findall सभी पंक्तियों को खोजता है और सूची में कैप्चर समूह के अंदर मान लौटाता है। <पी> कोई भी रेगेक्स फ़ंक्शन केवल स्ट्रिंग लौटाता है, इसलिए मान फ़्लोट में परिवर्तित हो जाते हैं और प्रिंट हो जाते हैं। फिर आप उन्हें फ़्लोट की सूची के रूप में सीधे किसी अन्य पायथन लिपि में उपयोग कर सकते हैं।

<पी> यह परिणाम है:

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> आप sed का भी उपयोग कर सकते हैं, आउटपुट को train_losses.txt में सहेज सकते हैं, और फ़ाइल से पढ़ सकते हैं। पहले हम केवल 'ट्रेन' मौजूद लाइनों को लक्षित करने के लिए '/ट्रेन/' का उपयोग करते हैं, फिर हम पहले की तरह ही रेगेक्स लागू कर रहे हैं।

sed -En '/Train/ s/.*Train loss: ([0-9]+\.[0-9]+).*/\1/p' log_train.txt | tee train_losses.txt
<पी> ".*" को आरंभ और अंत में जोड़ा जाता है ताकि sed सभी प्रासंगिक पंक्तियों की सामग्री से मेल खाए। फिर पूरी लाइन को कैप्चर ग्रुप के मान से बदल दिया जाता है। tee कमांड का उपयोग टर्मिनल में सामग्री को प्रिंट करते समय sed के आउटपुट को train_losses.txt में रीडायरेक्ट करने के लिए किया जाता है।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> एक क्षण रुककर सोचें कि युगों को निकालने के लिए आपको क्या चाहिए होगा। आपको ऐसी सभी पंक्तियों के लिए [500/10000] से 500 निकालना होगा। सरणी [1,500, 1000, 1500, ...] जैसी दिखनी चाहिए। आप उसी दृष्टिकोण का अनुसरण कर सकते हैं जैसा हमने पिछले उदाहरण के लिए उपयोग किया था। <पी> ध्यान दें कि यदि आप "[" का मिलान करना चाहते हैं " या "] ", तुम्हें इससे बचना होगा। इसका उत्तर यहां दिया गया है.

बल्क फ़ाइल का नाम बदलना

<पी> आपके पास उपसर्गों के रूप में कुछ यादृच्छिक मानों वाली ये फ़ाइलें हैं। आपको सभी फ़ाइलों का नाम 1.mp4, 2.mp4 इत्यादि के रूप में बदलना होगा। इस प्रकार फ़ाइलें उत्पन्न की गईं।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> यह एक सामान्य परिदृश्य है जहां आपके पास उन फ़ाइलों की एक सूची होती है जिनके नाम में अनुक्रम संख्या होती है लेकिन कुछ अन्य वर्ण भी होते हैं जिन्हें आप नहीं चाहते हैं।

<पी> पैटर्न को एपिसोड तक किसी भी चीज़ से मेल खाना चाहिए, फिर एक अंडरस्कोर और फिर संख्या और अंत में .mp4। <पी> प्रासंगिक मान '.mp4' से पहले की संख्या है जिसे हम कैप्चर ग्रुप के अंदर रखेंगे। .*Episode_ संख्या तक सभी चीजों का मिलान किया जाएगा। फिर हम ([0-9]+) से नंबर कैप्चर कर सकते हैं और .mp4 को \.mp4 से भी मिलाएँ . <पी> तो अंतिम रेगेक्स .*Episode_([0-9]+)\.mp4 है . चूँकि हम .mp4 रखना चाहते हैं प्रतिस्थापन स्ट्रिंग \1.mp4 होगी .

<पी> यह sed का उपयोग करके इसे हल करने का एक तरीका है।

for i in *.mp4; do
 newname=$(echo $i | sed -En 's/.*Episode_([0-9]+)\.mp4/\1.mp4/p')
 mv $i $newname
done;ls
<पी> सबसे पहले नया नाम एक वेरिएबल में सेव किया जाता है और फिर फ़ाइल का नाम बदलने के लिए mv कमांड का उपयोग किया जाता है।

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> क्या हम सिर्फ .* का उपयोग कर सकते थे .*Episode_ के स्थान पर ? इस उदाहरण में, हाँ. लेकिन Steins_Gate0.mp4 जैसे फ़ाइल नाम हो सकते हैं जहां 0 यह मूवी के नाम का हिस्सा है और आप वास्तव में इस फ़ाइल का नाम बदलना नहीं चाहते थे, इसलिए जितना संभव हो उतना विशिष्ट होना हमेशा बेहतर होता है।

<पी> यदि कुछ फ़ाइलों को "Random_Episode6.mp4" नाम दिया जाए तो क्या होगा? अंतर यह है कि एपिसोड के बाद कोई अंडरस्कोर नहीं है। आपको क्या परिवर्तन करने की आवश्यकता होगी?

<पी> उत्तर यह है कि आपको "?" जोड़ना होगा इसे वैकल्पिक बनाने के लिए "_" के बाद। रेगेक्स .*Episode_?([0-9]+)\.mp4 होगा .

ईमेल सत्यापन

<पी> ईमेल को सत्यापित करने के लिए सभी प्रकार के जटिल रेगेक्स मौजूद हैं।

<पी> यहाँ एक सरल है:^[^@ ]+@[^@.]+\.\w+$ . यह A@B.C प्रारूप से मेल खाता है <पी> नीचे दी गई तालिका इस पैटर्न को छोटे टुकड़ों में विभाजित करती है:

पैटर्न मिलान ^ लाइन[^@ ]+ की शुरुआत "@" और स्पेस कैरेक्टर@[^@.]+ को छोड़कर कुछ भी @ के बाद "@" और "" को छोड़कर कुछ भी आता है। अक्षर \.\w+ "।" इसके बाद शब्द वर्ण$ आते हैं पंक्ति का अंत <पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> रेगेक्सआर साइट में, आप ऊपरी दाएं कोने में फ़्लैग्स टैब से मल्टीलाइन फ़्लैग को सक्षम कर सकते हैं। अंत में 'जीएम' इंगित करता है कि मल्टीलाइन ध्वज सक्षम है।

<पी> हम देख सकते हैं कि पंक्ति 2,3,5,6 मेल नहीं खाती। क्या आप कारण का पता लगा सकते हैं और रेगेक्स का कौन सा भाग इसे अयोग्य घोषित करने के लिए जिम्मेदार है?

<पी> इसका उत्तर यहां दिया गया है

पासवर्ड बाधाएं

<पी> आप प्रतिबंध लगाने के लिए रेगेक्स का भी उपयोग कर सकते हैं। यहां हम सकारात्मक पूर्वसूचना की शक्ति को उजागर करेंगे। <पी> मान लीजिए कि हम किसी स्ट्रिंग को तभी स्वीकार करना चाहते हैं जब उसमें कोई अंक हो। आप पहले से ही जानते हैं कि '\d' वर्ग के साथ एक अंक कैसे खोजा जाता है। इसे पूरा करने के लिए, हम [^\d]*\d का उपयोग कर सकते हैं . यह किसी भी गैर-अंकीय वर्ण का 0 या अधिक बार मिलान करेगा और फिर एक अंक का मिलान करेगा। <पी> हम अभिव्यक्ति .*\d का भी उपयोग कर सकते हैं एक अंक से मिलान करने के लिए. इसलिए यदि स्ट्रिंग में कोई अंक नहीं है तो लुकहेड विफल हो जाएगा और उस स्ट्रिंग के किसी भी अक्षर का मिलान नहीं किया जाएगा, जिससे एक खाली स्ट्रिंग "" वापस आ जाएगी। <पी> जब हम एक प्रोग्रामिंग भाषा का उपयोग कर रहे हैं, तो हम जांच कर सकते हैं कि क्या रेगेक्स ने एक खाली स्ट्रिंग लौटा दी है और यह निर्धारित कर सकते हैं कि बाधाएं संतुष्ट नहीं हैं।

<पी> हम एक रेगेक्स बनाएंगे जो निम्नलिखित मानदंड लागू करेगा:

  1. न्यूनतम 8 अक्षर और अधिकतम 16 अक्षर.
  2. कम से कम एक छोटा अक्षर।
  3. कम से कम एक बड़ा अक्षर।
  4. कम से कम एक नंबर.
<पी> इसे प्राप्त करने के लिए, आप सकारात्मक दृष्टिकोण का उपयोग कर सकते हैं। यह रेगेक्स है:

<पी> ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,16}$ <पी> नीचे दी गई तालिका बताती है कि रेगेक्स का कौन सा भाग कौन सी बाधा लगाता है:

पैटर्न लगाई गई बाधा .{8,16} न्यूनतम 8 और अधिकतम 16 अक्षर(?=.*[a-z]) न्यूनतम एक छोटा अक्षर(?=.*[A-Z]) न्यूनतम एक अपरकेस अक्षर(?=.*\d) न्यूनतम एक अंक <पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> कम से कम 5 बड़े अक्षर लगाने के लिए आपको किस संशोधन की आवश्यकता होगी?

<पी> आप सोच सकते हैं (?=.*[A-Z]{5,}) काम कर देंगे. लेकिन इस अभिव्यक्ति के लिए सभी 5 अक्षरों का एक साथ होना आवश्यक है। rand-ABCDE-rand जैसी एक स्ट्रिंग मिलान किया जाएगा लेकिन 0AxBCDxE0 मिलान नहीं किया जाएगा, भले ही इसमें 5 बड़े अक्षर हों (क्योंकि वे आसन्न नहीं हैं)।

<पी> फिर भी, हमारे पास बचाव के लिए कब्जा करने वाले समूह आ रहे हैं। हम स्ट्रिंग में कहीं भी 5 बड़े अक्षरों का मिलान करना चाहते हैं। हम पहले से ही जानते हैं कि हम 1 अपरकेस अक्षर का मिलान .*[A-Z] से कर सकते हैं . अब हम उन्हें एक कैप्चर ग्रुप के अंदर रखेंगे और न्यूनतम 5 का क्वांटिफायर संलग्न करेंगे। अभिव्यक्ति (.*[A-Z]){5,} होगी .

<पी> यहाँ अंतिम उत्तर है:

<पी> (?=.*[A-Z]) के स्थान पर आपको (?=(.*[A-Z]){5,}) की आवश्यकता होगी . व्यंजक ^(?=.*[a-z])(?=(.*[A-Z]){5,})(?=.*\d).{8,16}$ बन जाता है .

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> मजबूत पासवर्ड लागू करने के लिए आपको यह भी आवश्यक हो सकता है कि पासवर्ड में कुछ शब्द न हों। <पी> उदाहरण के लिए, यदि पासवर्ड में pass है तो हम उसे अस्वीकार करना चाहते हैं या 1234 . नकारात्मक लुकहेड्स इस कार्य के लिए उपकरण है। रेगेक्स ^(?!.*(pass|1234)).*$ होगा .

<पी> मास्टर रेगुलर एक्सप्रेशन:वास्तविक दुनिया के उदाहरणों के साथ एक व्यावहारिक मार्गदर्शिका

<पी> इस रेगेक्स में, हम pass डालते हैं और 1234 एक कैप्चर ग्रुप के अंदर और तार्किक OR ऑपरेटर का उपयोग किया गया। यह कैप्चर ग्रुप दूसरे कैप्चर ग्रुप के अंदर नेस्ट किया गया है, जिसके पहले ?!.* लगा हुआ है . यह इसे एक नकारात्मक लुकहेड बनाता है जो .{8,} तक कम से कम 8 वर्ण होने पर मेल खाता है इस शर्त के साथ कि, pass या 1234 स्ट्रिंग में कहीं भी मौजूद नहीं हो सकता.

अंतिम शब्द

<पी> मुझे आशा है कि इस लेख को पढ़ने के दौरान आपको अच्छा अभ्यास मिला होगा। यदि आप कुछ वाक्यविन्यास भूल जाते हैं तो कोई बात नहीं। मुख्य अवधारणाओं को समझना और रेगेक्स के साथ क्या संभव है इसका अच्छा विचार होना महत्वपूर्ण है। फिर, यदि आप कोई पैटर्न भूल जाते हैं, तो आप उसे गूगल पर खोज सकते हैं या किसी चीटशीट का संदर्भ ले सकते हैं। <पी> जितना अधिक आप अभ्यास करेंगे, उतना ही अधिक आप बाहरी सहायता के बिना प्राप्त कर सकेंगे। अंततः आप सुपर कॉम्प्लेक्स और प्रभावी रेगेक्स को पूरी तरह ऑफ़लाइन लिखने में सक्षम होंगे। <पी> वहां पहले से ही कुछ अच्छे रेगेक्स चीटशीट मौजूद हैं, इसलिए मैं यहां कुछ अधिक गहराई से बनाना चाहता था जिसे आप मुख्य अवधारणाओं और सामान्य उपयोग के मामलों के लिए संदर्भित कर सकें। <पी> यदि आप किसी चीटशीट की तलाश में हैं, तो QuickRef की चीटशीट मददगार है। यह सिंटैक्स को याद करने के लिए एक अच्छी जगह है और वे विभिन्न प्रोग्रामिंग भाषाओं में रेगेक्स से संबंधित कार्यों का कुछ बुनियादी अवलोकन भी प्रदान करते हैं।

<पी> अधिकांश रेगेक्स तकनीकें सभी प्रोग्रामिंग भाषाओं और उपकरणों में समान हैं - लेकिन कुछ उपकरण अतिरिक्त सुविधाएँ प्रदान कर सकते हैं। इसलिए अपने लिए सर्वश्रेष्ठ टूल चुनने के लिए आप जिस टूल का उपयोग कर रहे हैं उस पर कुछ शोध करें।

<पी> मेरा अंतिम सुझाव यह होगा कि सिर्फ इसलिए कि आप ऐसा कर सकते हैं, रेगेक्स का उपयोग करने के लिए बाध्य न करें। कई बार नियमित string.find() काम पूरा करने के लिए पर्याप्त है. लेकिन यदि आप टर्मिनल में रहते हैं, तो आप निश्चित रूप से केवल रेगेक्स के साथ बहुत कुछ कर सकते हैं।

<पी> अगर आपको इस तरह का आर्टिकल पसंद आता है तो आप मेरे ब्लॉग या ट्विटर पर नजर रख सकते हैं।

<पी> मुफ़्त में कोड करना सीखें. फ्रीकोडकैंप के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर्स के रूप में नौकरी पाने में मदद की है। आरंभ करें


  1. Android छवि ज़ूम-इन और ज़ूम-आउट देखें? Android छवि ज़ूम-इन और ज़ूम-आउट देखें?

    यह उदाहरण दर्शाता है कि मैं android ImageView को कैसे ज़ूम इन और ज़ूम आउट कर सकता हूँ। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 - निम्न कोड को res/layout/activity_main.xml में जोड़ें। <?xml

  1. आईओएस में इंटरनेट से वर्तमान तिथि और समय कैसे प्राप्त करें? आईओएस में इंटरनेट से वर्तमान तिथि और समय कैसे प्राप्त करें?

    दिनांक और समय के साथ काम करना मुश्किल हो सकता है, मैंने नए प्रोग्रामर को दिनांक और समय के साथ संघर्ष करते देखा है। लगभग सभी आवेदनों में आपको तिथि प्राप्त करने की आवश्यकता होगी और कई संचालन इस पर निर्भर हैं। यहां हम देखेंगे कि वर्तमान तिथि और समय को तेजी से कैसे प्राप्त करें। इस पोस्ट में हम देखेंग

  1. CSS के साथ रिस्पॉन्सिव कटआउट/नॉकआउट टेक्स्ट कैसे बनाएं? CSS के साथ रिस्पॉन्सिव कटआउट/नॉकआउट टेक्स्ट कैसे बनाएं?

    CSS के साथ रिस्पॉन्सिव नॉकआउट टेक्स्ट बनाने के लिए, कोड इस प्रकार है - उदाहरण <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style>    body {font-family: 'Segoe UI', Tahoma, Genev