आप रेगुलर एक्सप्रेशन कैसे सीखते हैं? [बन्द है]


80

मैं यह नहीं पूछ रहा कि मुझे कहां सीखना है। मुझे बहुत सारे अच्छे संसाधन ऑनलाइन और किताबें आदि मिले हैं।

लेकिन बिल्ली मैं उनसे कैसे निपटता हूं। इसकी शुरुआत कहां से होती है, अंत? पाठ पर regexp प्रोसेसर कब प्रगति करता है, कब अपना पक्ष रखता है और दूसरे मैच की कोशिश करता है? आदि।

मुझे लगता है कि मिस्र के पिरामिडों पर चित्रलिपि का पता लगाने की कोशिश की जा रही है।


2
की क्रमबद्ध करें विषय पर - regular-expressions.info । नीचे दिए गए इस और @ जलयान के सुझाव का उपयोग करें। करके सींखें!
फ़्रीहिट

6
gskinner.com/RegExr मैंने पाया है कि regexs को विकसित करने के लिए सबसे अच्छा उपकरण है।
कैलम रोजर्स

एक बार में थोड़ा। सरल सामग्री ("आआ", "आ", "ए * बी", आदि) से शुरू करें और कार्यान्वयन-विशिष्ट घटकों (यानी पीसीआरई) तक अपना काम करें। फिर एक पैटर्न के साथ आते हैं और एक रेगीक्स बनाने की कोशिश करते हैं जो इसे फिट करता है।
tylerl

मैं महान कार्यक्रम RegexBuddy के साथ परीक्षण और त्रुटि से सीखा। regexbuddy.com (मुझे इस विज्ञापन के लिए कोई श्रेय नहीं मिलता है, इस कार्यक्रम ने वास्तव में इसे सीखना आसान बना दिया है)
यम मार्कोविच

rubular.com regexs को विकसित करने के लिए एक अच्छा उपकरण है।
गजलर

जवाबों:


68

मुझे लगता है कि ऑटोमेटा सिद्धांत का ज्ञान समझने के लिए महत्वपूर्ण है।

एक बार जब आप समझते हैं कि एक ऑटोमेटन क्या है, और नियमित भाषा कैसे परिभाषित की जाती है, तो नियमित अभिव्यक्तियों को समझना बहुत आसान होगा।

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

संपादित करें

नीचे दिए गए कुछ टिप्पणियों ने महत्वपूर्ण बिंदुओं को उठाया:

  1. यह मत भूलो कि नियमित अभिव्यक्ति (जैसा कि अधिकांश प्रोग्रामिंग भाषाओं में लागू किया गया है) ऑटोमेटा सिद्धांत में नियमित अभिव्यक्तियों का सुपरसेट है। जबकि एक अच्छा सैद्धांतिक पृष्ठभूमि शुरू करने के लिए एक उपयोगी स्थान है, यह आपको सब कुछ नहीं बताएगा। (धन्यवाद, डेविड थॉर्नले)

  2. एकाधिक टिप्पणीकारों का कहना है कि सैद्धांतिक आधार को सीखे बिना विभिन्न रेगेक्स वाक्यविन्यास सीखना संभव है। हालांकि यह सच है कि आप पूरी तरह से समझने के बिना वाक्य रचना सीख सकते हैं कि यह कैसे काम करता है, यह मेरी धारणा थी कि पूरी समझ ओपी के बाद क्या थी। प्रश्न वास्तविक आधार के बारे में था: प्रोसेसर कब अग्रिम होता है? कब रुकता है? यह कैसे तय करता है कि इसका मैच है? यही आधार है, यही सिद्धांत है, और यह ऑटोमेटा सिद्धांत पर आधारित है। यकीन है, आप बिना इंजन के काम किए बिना कार चला सकते हैं। लेकिन अगर आप कहा जा रहा है "कैसे गैस वास्तव में यह ड्राइव पड़ता है" - आप करने के लिए है , आप कैसे इंजन बनाया गया है के बारे में बात नहीं करते?


टिप्पणीकार: यदि आप इस प्रश्न के बारीक बिंदुओं पर चर्चा करना चाहते हैं, तो कृपया चैट का उपयोग करें । अन्यथा, कृपया एक उत्तर छोड़ने पर विचार करें या उन उत्तरों पर मतदान करें जो आपको सबसे सही लगते हैं।

संपादन के लिए धन्यवाद। यह इस जवाब को सच्चाई के और करीब लाता है। हालांकि मुझे अभी भी नहीं लगता है कि आपको वास्तव में ऑटोमेटा सिद्धांत (मुझे नहीं पता है, लेकिन मुझे अभी भी जटिल नियमित अभिव्यक्ति लिख सकते हैं) जानने की जरूरत है, मैं इस बात से सहमत हूं कि सिद्धांत के कुछ ज्ञान मदद कर सकते हैं। विशेष रूप से यह जानना कि कैसे काम करता है और लालची द्वारा नियंत्रित किया जाता है / अस्वाभाविक / अधिकारपूर्ण मात्रात्मक वास्तव में आपकी समझ में मदद कर सकता है।
NikiC

बस मेरे 2 सेंट: MSDN के चैनल 9 में C ++ STL regex लाइब्रेरी के बारे में एक हालिया वीडियो श्रृंखला में, प्रस्तुतकर्ता, जो STL का अनुचर भी है, ने कहा कि वे इसे एक ऑटोमेटा के रूप में लागू करते हैं। तो इस सिद्धांत को जानते हुए ओपी को वास्तव में कुछ अंतर्दृष्टि देनी चाहिए कि रेगेक्स के काम कैसे होते हैं।
14

5
मैं शुरुआती बयान से बिल्कुल भी सहमत नहीं हूं। जब मैंने नियमित अभिव्यक्ति सीखी तो मुझे ऑटोमेटा सिद्धांत के बारे में कुछ नहीं पता था। तीन दशक बाद भी मैं नहीं। मुझे क्या पता था कि एक आदमी पृष्ठ को कैसे पढ़ना है, इसे शाब्दिक रूप से लेना है, और एक संकेत पर कैसे प्रयोग करना है।
ब्रायन ओकले

1
@ ब्रायन अच्छी तरह से ... आपका अनुभव थोड़े ही साबित करता है। आप शायद इसका उपयोग करना जानते हैं , लेकिन आप वास्तव में यह नहीं समझते हैं कि यह कैसे काम करता है। यदि आप करते हैं - तो आप ऑटोमेटा सिद्धांत के बारे में कुछ जानते हैं , भले ही आप इसका नाम नहीं जानते हों। लेकिन आप ऑटोमेटा सिद्धांत को जाने बिना पूरी तरह से नियमित अभिव्यक्ति को नहीं समझ सकते हैं, और मैन पेज पढ़ने की कोई भी मात्रा आपकी मदद नहीं कर सकती है (जब तक कि आप ऑटोमेटा सिद्धांत को समझाने वाले मैन पेज नहीं पढ़ रहे हैं)।
littleadv

36

अभ्यास करके।

मैंने वेब स्क्रैपिंग के साथ मज़ा करके सीखा। मुझे यकीन है कि मैं अकेला नहीं था जो सिर्फ मनोरंजन के लिए कर रहा था।

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

दूसरा उदाहरण: कुछ कोड लिखें जो आपके पसंदीदा वेबकॉम की तस्वीर को पुनः प्राप्त करता है, (मुझे उदाहरण के लिए सिनफेस्ट बहुत पसंद है ) और जो इसे आपकी हार्ड ड्राइव पर कहीं संग्रहीत करता है। "Img" टैग और इसकी सामग्री को पुनः प्राप्त करने के लिए केवल नियमित अभिव्यक्तियों का उपयोग करें। यदि यह कहीं संग्रहीत है तो वैकल्पिक रूप से इसके शीर्षक को भी पुनः प्राप्त करें।


15
नियमित भावों के साथ HTML पार्स करना आमतौर पर एक बुरा विचार है।
मैक्सएमपी

10
बेशक यह एक बुरा विचार है। DOM / Sax पार्सर या अन्य समर्पित XML पाठकों का उपयोग करना है जो "आम तौर पर" का उपयोग किया जाना चाहिए। लेकिन यहाँ विषय नियमित अभिव्यक्तियों को सीखने के बारे में है, और मैंने साझा किया कि मैंने जो सोचा था उसमें नियमित अभिव्यक्तियों के बारे में कैसे सीखा "मजेदार" तरीका था।
जलयान

3
HTML वेब पेजों के लिए XML पार्सर का उपयोग करना नियमित अभिव्यक्ति के साथ उन्हें स्क्रैप करने से भी बदतर विचार है।
स्कोलिमा

8
आह ठीक है, मैं उस बारे में जो मैं सोचता था उस पर और अधिक सटीक होना चाहता था, लेकिन मैं आलसी था और मैंने सिर्फ टिप्पणी पर प्रतिक्रिया दी ... मुझे लगता है कि हम सभी सहमत हो सकते हैं कि 1. पूरे दस्तावेज़ को पार्स करने के लिए नियमित अभिव्यक्ति का उपयोग करना एक बुरा विचार है। 2. HTML को पार्स करने के लिए XML पार्सर का उपयोग करना एक बुरा विचार है। XHTML को पार्स करने के लिए XHTML का उपयोग करना सही है। एक-लाइनर या HTML से कुछ बहुत ही विशिष्ट जानकारी प्राप्त करने के लिए नियमित अभिव्यक्ति का उपयोग करना सही है। या मैं इसे
सम्‍मिलित

23

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

आप उन लानत regexp समझना चाहते हैं? इस किताब को पढ़ें।


2
यह निश्चित उत्तर होना चाहिए।
स्लिम

1
+100,000 सर्वश्रेष्ठ तकनीकी पुस्तकों में से एक है, और आसानी से प्रश्न के विषय के बारे में।
Affe

यह पुस्तक पसंद आई। मुख्य बिंदु यह है कि इसने मुझे रेगेक्स में उपलब्ध सभी विभिन्न कार्यात्मकताओं को समझने में मदद की। आप किसी पुस्तक को पढ़ने से सभी वाक्यविन्यास को याद नहीं कर पाएंगे, लेकिन पुस्तक आपको उन सभी चीजों को दिखाएगी जो मौजूद हैं, इसलिए आपको पता है कि आपके पास आने पर किसी समस्या को हल करने के लिए कौन से उपकरण हैं।
किब्बी

इस उत्तर के लिए बिल्कुल +1। मैं तब तक रेगेक्स में भाग गया जब तक कि मैं अंत में बैठकर इस आवश्यक वॉल्यूम लाइन-बाय-लाइन को नहीं पढ़ता। अब फ्रिडल ने मुझे एक नींव दे दी जिससे मैं उन सभी गैर-मानक बदलावों के माध्यम से अपना रास्ता बना सकूं जो हमें आज प्लेग देते हैं! मैं ओपी और बाकी सभी के लिए इस संदर्भ की अत्यधिक अनुशंसा करता हूं। अपनी टिप्पणी के लिए +1 से @ स्लीम भी!
जॉन टोबेलर

19

इसकी शुरुआत कहां से होती है, अंत? पाठ पर regexp प्रोसेसर कब प्रगति करता है, कब अपना पक्ष रखता है और दूसरे मैच की कोशिश करता है? आदि।

मैं आपके लक्ष्यों को स्पष्ट करके और फिर आपकी सीखने की शैली का पता लगाकर शुरू करूँगा ।

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

शुरुआती अनुप्रयोगों के लिए, आमतौर पर यह समझने की आवश्यकता नहीं है कि एक उपकरण कैसे प्रभावी ढंग से उपयोग करने के लिए काम करता है। आपको यह जानने की जरूरत नहीं है कि लकड़ी में छेद करने के लिए ड्रिल मोटर कैसे काम करती है; आपको यह समझने की आवश्यकता है कि ड्रिल का उपयोग कैसे करें , ड्रिल का निर्माण कैसे करें ।

तो आपका लक्ष्य क्या है? क्या आप सीखना चाहते हैं कि एक नियमित अभिव्यक्ति इंजन कैसे बनाया जाए ? या क्या आप यह जानना चाहते हैं कि व्यावसायिक समस्याओं को हल करने के लिए नियमित अभिव्यक्ति का प्रभावी ढंग से उपयोग कैसे करें ? उन विभिन्न लक्ष्यों को प्राप्त करने के लिए अलग-अलग सीखने की तकनीक की आवश्यकता होती है।

नियमित अभिव्यक्ति इंजन कैसे काम करता है, इसके बारे में अपने विशिष्ट प्रश्न को संबोधित करने के लिए: यह निर्भर करता है। नियमित अभिव्यक्तियों के लिए "क्लासिक" सैद्धांतिक दृष्टिकोण एक nondeterministic परिमित ऑटोमेटन के लिए ब्लूप्रिंट के रूप में नियमित अभिव्यक्ति का उपयोग करना है, फिर समतुल्य नियतात्मक परिमित ऑटोमेटन का निर्माण करना है, और फिर इनपुट के खिलाफ उस ऑटोमेटन को निष्पादित करना है।

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

(मैंने एक लंबी श्रृंखला लिखना शुरू कर दिया कि यह सब कैसे काम करता है लेकिन मैं केवल पहले बारह लेखों के बाद भाप से बाहर निकल गया । आप उन्हें दिलचस्प लग सकते हैं यदि आप बुनियादी नियमित अभिव्यक्तियों की सैद्धांतिक पृष्ठभूमि पर एक संक्षिप्त प्राइमर चाहते हैं।)

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

मैं यह समझने की कोशिश नहीं करूँगा कि रेग्युलर एक्सप्रेशंस का उपयोग करने के लिए एक ठोस ठोस समझ होने से पहले एक regexp इंजन कैसे काम करता है । उस पर ध्यान केंद्रित करें इससे पहले कि आप अनुकूलन रणनीतियों में विभिन्न विभिन्न इंजनों को खोदना शुरू करें।


+1 क्योंकि आप कई चीज़ों को संबोधित करते हैं जो रेगेक्स का उपयोग करते समय जानना अच्छा है; मैं आपके निर्णय पर असहमत हूं कि इनसाइट्स को जानना जरूरी नहीं है। ड्रिलिंग के लिए, आप पूरी तरह से सही हैं; कंप्यूटर में, मैंने पाया है कि जितनी जल्दी मैं सोचता हूं, उतनी ही जल्दी मैं उस बिंदु पर पहुंच जाता हूं, जहां मुझे अपने एप्लिकेशन को मास्टर करने के लिए किसी चीज़ को समझना पड़ता है - चाहे वह C ++ हो (कंपाइलर), वेब सर्वर (HTTP), या रेगेक्स (ऑटोमोटिव सिद्धांत) । उस बिंदु पर नहीं जहां मैं एक विशेषज्ञ बन गया हूं, लेकिन अंतर्निहित सिद्धांतों की एक अच्छी समझ अक्सर सीखने का सबसे तेज़ तरीका है।
फेलिक्स डॉमबेक

3
@ फेलिक्स: मुझे लगता है कि हम वास्तव में सहमत हैं। मैंने कहा कि शुरुआती अनुप्रयोगों के लिए आमतौर पर यह समझने की आवश्यकता नहीं है कि इसका उपयोग करने के लिए उपकरण कैसे काम करता है। वे निराला शब्द जानबूझकर थे। एक उपकरण के ट्रैवलमैन या मास्टरफुल उपयोग के लिए, इसके इंटर्नल के बारे में कम से कम कुछ समझने में बहुत मददगार है ताकि आप सटीक अनुमान लगा सकें कि उपकरण का प्रदर्शन कहां खराब होगा, कहते हैं।
एरिक लिपर्ट

हम्म, मुझे कुछ असहमत होना पड़ेगा। मेरे द्वारा बनाए गए कुछ सबसे उपयोगी व्यावसायिक कार्यक्रमों ने कुशलतापूर्वक समस्याओं को हल करने के लिए मैंने lexx और yacc में सीखा सिद्धांत का उपयोग किया है। आप सही हैं, एक पूर्ण, पीएचडी स्तर की समझ आवश्यक नहीं है। मुझे ब्लॉग पोस्ट पढ़ना होगा, वे सबसे दिलचस्प लगते हैं।
स्पेंसर रथबुन

आप कहते हैं कि नियमित अभिव्यक्ति नियमित नहीं है - लेकिन मैंने सोचा था कि नाम में दुनिया नियमित रूप से मेल खाने वाले भावों का जिक्र कर रही है - जैसे कि नियमित अभिव्यक्ति "[0-9]{3}"जो किसी भी तीन अंकों की संख्या से मेल खा सकती है, और तीन अंकों की संख्या 480 एक नियमित के लिए एक उदाहरण है। यह मेल खाता है।
विन्यासकर्ता

1
@configurator: एक "नियमित" भाषा एक ऐसी भाषा है जो एक परिमित ऑटोमोटन द्वारा पहचानी जा सकती है। हर नियमित भाषा को एक "नियमित अभिव्यक्ति" के रूप में चित्रित किया जा सकता है जिसमें केवल यूनियनों, विकल्प, कैटेनशन और क्लेन स्टार शामिल हैं। लेकिन अधिकांश "नियमित अभिव्यक्ति" इंजन इन दिनों नियमित भाषाओं की तुलना में अधिक जटिल भाषाओं को पहचानते हैं; उदाहरण के लिए, "सही ढंग से मिलान किए गए कोष्ठक के साथ वाक्य" की भाषा नियमित नहीं है, लेकिन आप इसे कुछ रेगेक्स इंजन में "नियमित अभिव्यक्ति" के साथ मेल कर सकते हैं।
एरिक लिपर्ट

6

मैं उनसे कैसे निपटूं?

किसी नई चीज की तरह:

10 Study
20 Practice
30 goto 10

अध्ययन

मुझे लगता है कि सबसे सफल शिक्षक किसी भी विषय को पहले पृष्ठभूमि की एक बिट प्रदान करके पढ़ाना शुरू करते हैं। आप जो सीख रहे हैं उसका संदर्भ होना सबसे महत्वपूर्ण है और सबसे महत्वपूर्ण बात यह है कि आप इसे क्यों सीख रहे हैं।

यह सब स्ट्रिंग मिलान है

रेगुलर एक्सप्रेशंस टेक्स्ट में मैचिंग पैटर्न का एक साधन है। यह एक घोषणात्मक भाषा है जो कई अन्य प्रोग्रामिंग भाषा में शामिल है।

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

नियमित अभिव्यक्ति बनाने का कारण अधिकांश प्रोग्रामिंग भाषाओं के निर्माण के लिए समान हैं: प्रोग्रामर ने खुद को एक ही जटिल कार्य को बार-बार करते हुए पाया और फैसला किया कि वे कोड लिखने का एक सरल तरीका चाहते हैं।

कुछ (और चाहिए) मेरे पिछले वाक्य के बारे में कुछ की लाइनों के साथ कह कर शिकायत करें:

RegEx एक कार्यक्रम को सरल नहीं बनाता है।

यह सच है

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

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

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

if ( 'foo' == 'bar' ) doSomething();

यही कारण है कि उदाहरण बेकार है क्योंकि यह कभी नहीं होगा करने के लिए कुछ भी

if ( foo == 'bar' ) doSomething();

काफी बेहतर; अब, हम वास्तव में समय से पहले नहीं जानते हैं कि कुछ किया जाएगा या नहीं। अब हम उपयोगकर्ता इनपुट को स्वीकार करना शुरू कर सकते हैं:

if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();

अद्भुत है, अब उपयोगकर्ता इनपुट कर सकते हैं barऔर कुछ तब तक होगा, जब तक कि आप उपयोगकर्ताओं से बग रिपोर्ट प्राप्त "bar"न कर लें कि यह काम नहीं कर रहा है, या यह कि "BAR" काम नहीं कर रहा है, या कि वे BRA100 बार टाइप कर चुके हैं और कुछ भी नहीं होता है।

गलत वर्तनी और अतिरिक्त पात्रों की उपेक्षा करना 'bar' != 'BAR', और प्रोग्रामर को यह सोचने की ज़रूरत है कि परीक्षण कहाँ गलत हैं।

सरल उपाय, उपयोग toLowerCase। यह आश्चर्यजनक रूप से काम करता है, लेकिन जब आप मिलान कर रहे हैं तो हमारे उन उपयोगकर्ताओं के बारे में जो अमेरिकी अंग्रेजी पर ब्रिटिश अंग्रेजी का उपयोग कर रहे हैं something == 'color'? अब आपको मैच करना होगा something == 'color' || somthing == 'colour'

लंबी कहानी छोटी, सरल पैटर्न बहुत जल्दी दोहराए जाने वाले कोड में बदल जाती है।

रंग उदाहरण के साथ बस मिलान किया जा सकता है:

/colou?r/.test( something )

नियमित अभिव्यक्तियों की बुनियादी बातों की एक ठोस समझ आपको पहिया को फिर से स्थापित करने में बर्बाद करने वाले समय को काफी कम कर सकती है।

पढ़ाई कहां से करें

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

इसे पढ़ें।
यह सब।
तो इसे फिर से पढ़ें।

सीखने में समय लगता है, इसे एक निवेश के रूप में सोचें: RegEx सीखने के लिए एक घंटे अब अगली बार एक घंटे बचाता है जब आपको कुछ स्ट्रिंग पैटर्न मिलान करने की आवश्यकता होती है, और फिर उसके बाद अगले घंटे।

अभ्यास

RegEx के बारे में सब पढ़ने के बाद, आप शायद इसे ज़्यादातर नहीं समझ पाएंगे। ऐसा इसलिए है क्योंकि आप वास्तव में नहीं कर रहे हैं कर रही है इसके साथ कुछ भी।

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

JS ने RegEx का उपयोग करने के कुछ अलग और सरल तरीके दिए हैं:

string.match( regex )
regex.exec( string )
regex.test( string )

कुछ सरल से शुरू करना जैसे:

javascript:'color'.match(/colou?r/);

दरवाजे में अपना पैर पाने का एक आसान तरीका है। इसके साथ खेलते हैं, यह देखते हैं कि क्या मेल खाता है, और क्या नहीं।

जब आप अभ्यास पर अटक जाते हैं, तो जारी रखें 30। आपको अधिक जानने के लिए पढ़ने की आवश्यकता है, लेकिन आपने जो सीखा है उसे समझने के लिए आपको अभ्यास करने की आवश्यकता है।


ब्राउज़र में जावास्क्रिप्ट के साथ गड़बड़ करने की सिफारिश करने के लिए +1।
जॉन टोबेलर

5

ब्रायन कार्निघन ने सुंदर कोड पुस्तक में एक साधारण रेग-एक्स प्रोसेसर लिखा है । मुझे लगता है कि आप संसाधनों की तलाश नहीं कर रहे हैं, लेकिन यह मूल कार्यान्वयन को देखने में मदद कर सकता है , अंदर पर।


उल्लिखित "रेगेक्स प्रोसेसर" वास्तव में असहमति को लागू नहीं करता है, और दिए गए दृष्टिकोण के साथ, उन्हें जोड़ना बहुत कठिन है। मुझे पुस्तक पसंद है, लेकिन यह एक ऐसी चीज है जिससे मैं निराश था।
फेलिक्स डॉमबेक

4

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


1
+1, "रेगेक्स हीरो" बहुत अच्छा है: regexhero.net/tester
एंजेलो

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

1
मैंने हमेशा रेगेबड्डी को दिलचस्प पाया है, लेकिन मुझे इसे खरीदना पसंद नहीं है। मूल रेगेक्स परीक्षण के लिए, कई अन्य उपयोगिताओं हैं। रेगेक्स का एक शाब्दिक विवरण देखने के लिए हालांकि कम उपकरण हैं। रेगेक्स हीरो का पेड वर्जन भी यही करता है। RegexBuddy के लिए एक चीज़ अद्वितीय है, हालांकि Regex Debugger है, जो एक चरित्र की प्रत्येक स्वीकृति या अस्वीकृति को दर्शाता है, और प्रत्येक बैकग्राउंड को विस्तार से वर्णन करता है, जो वास्तव में मदद कर सकता है जब एक बड़े और बहुत अलग regex को डिबग करना। मैंने ऐसा करने वाले किसी अन्य टूल पर ध्यान नहीं दिया है।
केविन कैथार्ट

3

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

मेरी सलाह यह है कि आप जिस चीज़ की खोज कर रहे हैं, उसके उदाहरण से शुरू करें और उससे बच जाएँ। तो दूसरे शब्दों में, यदि आप कोष्ठक में किसी भी चीज़ की तलाश कर रहे हैं, तो उस पाठ में एक स्ट्रिंग का उदाहरण लें जिसे आप खोज रहे हैं: (this is an example of something you'd want to find)

पात्रों से बचकर शुरू करें ताकि आप शाब्दिक चरित्र की खोज करें: \(this is an example of something you'd want to find\)

इसे परखें, सत्यापित करें कि यह आपके उदाहरण को सही ढंग से ढूंढता है। फिर इस तरह के किसी भी पाठ को खोजने के लिए अभिव्यक्ति को सामान्य करें, न कि केवल आपके द्वारा पाया गया उदाहरण। तो यह तब बन जाएगा: \([^)]*\) (किसी भी वर्ण का मतलब है कि किसी भी संख्या के लिए "" नहीं है, जिसमें 0 भी शामिल है)।

इसे फिर से टेस्ट करें, और सत्यापित करें कि न केवल यह आपके उदाहरण को ढूंढता है, बल्कि अन्य इसे पसंद करते हैं। इंटरनेट पर अधिक जटिल लेकिन अधिक लगातार नियमित अभिव्यक्तियों के लिए खोजें और हर एक संभावना के बारे में चिंता करने से बचने के लिए अपने मौजूदा नियमित अभिव्यक्तियों के साथ उन्हें पैच करें।

यह इसके बारे में। और ओह, सीखो और \ Q ... \ E से प्यार करो। अधिकांश नियमित अभिव्यक्ति भाषाओं में, \ Q शाब्दिक पैटर्न की शुरुआत को इंगित करता है और \ E अंत को चिह्नित करता है, यदि आपको विशेष रूप से परिष्कृत पैटर्न की खोज से निपटना है और उन्हें बचाना नहीं आता है। इसने मेरे जीवन को एक जोड़े से अधिक अवसरों से बचाया।


3

मैं आपको एक सरल प्रश्न के लिए एक सरल उत्तर दूंगा। सबसे पहले, आपको यह समझने की जरूरत है कि रेगुलर एक्सप्रेशंस (RegEx) क्या हैं - वे क्या करते हैं, उनके लिए क्या उपयोग किया जाता है। फिर, एक महान उपकरण आरंभ करने के लिए।

  1. यह क्या है? RegEx पैटर्न मिलान को व्यक्त करने के लिए एक भाषा है। यह कहना है, इसका उपयोग करके, आप उन पात्रों का एक संयोजन बना सकते हैं जो पहचानता है, या पाता है, पाठ में पैटर्न। यह कैसे उपयोगी है? प्रोग्रामिंग में, आप कंप्यूटर को किसी स्रोत (एक उपयोगकर्ता इनपुट, एक वेब पेज, आदि) से पाठ का मिलान करने के लिए कह सकते हैं और पता लगा सकते हैं कि पाठ के विशिष्ट पेटेंट इसके भीतर निहित हैं या नहीं। उदाहरण के लिए, एक अवधि (।) किसी भी वर्ण - अक्षर या संख्या का प्रतिनिधित्व करती है। ब्रेसिज़ में संख्याएँ पुनरावृत्तियों की संख्या का प्रतिनिधित्व करती हैं, इसलिए "। {1,30}" किसी भी वर्ण को इंगित करता है, 1 से 30 बार के बीच दोहराया जाता है - दूसरे शब्दों में, आपके पास एक खाली स्ट्रिंग नहीं हो सकती है, और यह 30 से अधिक लंबा नहीं हो सकता है पात्र। और वहीं से चलता है।

  2. सीखने की शुरुआत कैसे करें? निरपेक्ष सबसे अच्छा उपकरण जो मैंने देखा है वह एक्सप्रेसो है , लेकिन यह केवल विंडोज के लिए है। इसका एक बहुत व्यापक जीयूआई है जहां आप उन तत्वों के माध्यम से क्लिक करते हैं जिन्हें आप अपनी अभिव्यक्ति में जोड़ना चाहते हैं, फिर परिणाम देखने के लिए विभिन्न इनपुट के खिलाफ जांच करने के लिए एक परीक्षक। मैंने मैक पर कुछ भी अच्छा नहीं देखा है (लेकिन मैं VMWare पर विंडोज चला रहा हूं, इसलिए वास्तव में मैक संस्करण की आवश्यकता नहीं है), लिनक्स पर देखने के लिए बहुत समय नहीं बिताया है।


1
एक्सप्रेसो के बारे में टिप के लिए धन्यवाद। मैंने इसे आज़माया और यह बहुत बढ़िया है!
जिम इन टेक्सास

3

एक अच्छे संदर्भ के अलावा, जिस तरह से आप वास्तव में सीखते हैं वह अच्छा सीखने के साधनों का उपयोग करना है। एक दो स्रोतों के साथ खुले स्रोत विम संपादक का उपयोग कर रहा है :

  1. : incsearch सेट करें ... जैसा कि आप कमांड लाइन पर एक खोज पैटर्न में टाइप करते हैं, संपादक ऑन-द-फ्लाई फ्लाई टेक्स्ट के पहले टुकड़े पर कूदता है जो मिलान और हाइलाइट करता है कि वास्तव में क्या मेल खाता है। यदि आप कुछ ऐसा टाइप करते हैं जो अब किसी भी चीज़ से मेल नहीं खाता है, तो विम आपके कर्सर को उस जगह पर वापस भेज देता है जहां आप शुरू हुए थे।
  2. : hlsearch सेट करें ... यह VIM को वर्तमान RE खोज से मेल खाने वाले सभी टेक्स्ट पर एक हाइलाइट की गई पृष्ठभूमि दिखाने के लिए कहता है।

अन्य एक नि: शुल्क उपकरण कॉल RegExCoach का उपयोग करने के लिए है । आप पाठ में पेस्ट करते हैं जिसे आप खोजना चाहते हैं, फिर किसी अन्य विंडो में आप अपनी नियमित अभिव्यक्ति विकसित करते हैं। विम की तरह, यह मक्खी पर सफल मैचों को उजागर करता है।


RegExCoach अब शेयरवेयर है। मुझे यह जटिल पर्ल-स्टाइल आरईएस विकसित करने में बहुत मददगार लगा।
फर्स्टक्राॅप

2

आप एक मूल स्ट्रिंग तुलना के साथ शुरू करते हैं। बहुत आसान है, लेकिन यह भी शक्तिशाली नहीं है।

अगला, यह आपके लिए हो सकता है, कि आपको केस की तुलनात्मक तुलना की आवश्यकता है, ताकि "ग्रीक" और "यूनिका" की तुलना बराबर हो। यह थोड़ा अधिक शक्तिशाली है।

एक दिन जब आप वर्तनी में छोटे अंतर देखते हैं, तो 2 शब्दों को बराबर की तुलना करने से नहीं रोकना चाहिए: अर्थात "व्यवस्थित" और "व्यवस्थित" समान की तुलना करना चाहिए। आप बैठते हैं और कुछ कोड लिखते हैं जो ऐसा करता है और आप खुश हैं।

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

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

और फिर, यह काफी आसान है और निम्न 3 मूल सिद्धांतों के लिए नीचे आता है:

आपके पास मूल regexps है: वर्ण जो स्वयं के लिए खड़े होते हैं, वर्ण वर्ग, बड़े अक्षरों के लिए \ n या \ p {Lu} जैसे वर्ण वर्गों के लिए आसान और संक्षिप्त नहीं हैं।

और फिर, आपके पास उन्हें संयोजित करने की कुछ संभावनाएं हैं: यदि r1 और r2 regexps हैं, तो r12 r1 | r2 (r1) हैं।

अंतिम, लेकिन कम से कम पुनरावृत्ति संशोधक: आर? r * r + r {n, m}

यह आपको जानना सबसे अधिक आवश्यक है। जब भी आपको आवश्यकता हो, आप कुछ भी देख सकते हैं।


2

दो अन्य अच्छे उत्तर आपको रेगेक्स के पीछे के सिद्धांत को जानने के लिए और अभ्यास करने के लिए कहते हैं, जो दोनों ही महान सलाह हैं। यदि आप गंभीर हैं, तो आपको मदद करने के लिए एक अच्छा विज़ुअल रेगेक्स टूल लाने की भी सलाह दूंगा।

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


2

जो कुछ हम आपको दे सकते हैं वह सीखने के लिए अधिक संसाधन हैं। यह सवाल अपने आप में एक संसाधन है।

वैसे, मैंने इस साइट से नियमित रूप से काफी आसानी से अभिव्यक्ति सीख ली है: http : //www. अनियमित-expressions.info/


1

मेरे लिए, यह देखते हुए कि regexp मैं क्या बना रहा हूं, यह वास्तव में मेरे जीवन को आसान बनाने में मदद करता है और उन्हें बेहतर ढंग से समझने में मेरी मदद करता है।

ऐसा करने के लिए, मैं Emacs में लक्ष्य पाठ के साथ एक फ़ाइल खोलूंगा, और फिर isearch-forward-regexpकमांड का उपयोग करूंगा । जैसे ही आप regexp डालते हैं, Emacs आपको दिखाता है कि यह क्या मेल खा रहा है (यह "isearch" भाग है)।

कमांड चलाने के लिए, Emacs में, आप उपयोग कर सकते हैं <ESC>xisearch-forward-regexp


1

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

मौलिक रूप से, इन दिनों सभी रेगेक्स इंजन समान सिद्धांतों का पालन करते हैं। वे सभी परिमित राज्य मशीनें हैं और यदि आप वास्तव में ऐसा कर रहे हैं, तो आपके पास लगभग किसी भी कोड पर एक पैर है जो आप लिखते हैं। यह उस में पुनरावृत्ति सीखने के समान है, एक बार जब आप इसे प्राप्त करते हैं, तो आप इसे सहज रूप से समस्याओं पर लागू करते हैं। वे सही उपकरण के साथ हल करना आसान है, लेकिन इसके बिना बहुत मुश्किल है।

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

इस प्रश्न में सीखने के लिए संसाधनों का एक समूह शामिल है, और एक फ्लेक्स कंकाल मैंने एक साथ फेंका।


1

अनिमोर, मैं पहले यह सुनिश्चित करने की कोशिश करता हूं कि स्ट्रिंग को समस्या को हल करने के लिए एक आसान तरीका नहीं है / "टोकन"।

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

यहाँ एक उदाहरण है:

string = "Sep 22 19:57:38 host fcron[9137]: \
          Job fbsetbg -r $HOME/backgrounds/ \
          started for user user (pid 9138)"

मिनट का मिलान करने के लिए:

string.match /^\w+\s\d+\s\d+:(\d+):\d+\s\w+\s/ # correct but bad
string.match /\d+:([^:]+):\d+/                 # correct and good

हर चीज के साथ समय खोजने की कोशिश करने के बजाय, अलग-अलग सीमाओं को खोजने की कोशिश करें।

उदाहरण थोड़ा विवादित है, लेकिन मैं सभी के साथ आ सकता हूं।


1

मेरे द्वारा उपयोग किया जाने वाला एक दृष्टिकोण ओपन सोर्स प्रोजेक्ट्स का एक गुच्छा खोजने के लिए था जिसे वाक्यविन्यास अपडेट की आवश्यकता थी और फिर एक तेजी से जटिल सेड स्क्रिप्ट लिखनी थी, जिसमें कई नियमित अभिव्यक्तियों का समावेश था।

प्रत्येक ओपन सोर्स प्रोजेक्ट में स्क्रिप्ट को कई अलग-अलग फाइलों के खिलाफ चलाने की आवश्यकता होती है। फिर विभिन्न शैलियों के साथ कई अलग-अलग परियोजनाओं के खिलाफ चलाया जाए। मैंने कुछ बहुत ही सरल तरीके से शुरुआत की, %s/before/after फिर मैंने पाया कि यह बहुत सारे मामलों से मेल खाता है। इसलिए मैंने इसे रोकने के लिए अधिक सामान जोड़ा। फिर मुझे अलग-अलग सिंटैक्स शैलियों का उपयोग करके अलग-अलग प्रोजेक्ट मिले, जिन्हें अलग-अलग परिवर्तनों की आवश्यकता थी।

अंत में मैं समाप्त हो गया

  • महान कौशल और नियमित अभिव्यक्ति के बारे में ज्ञान
  • sed के साथ अच्छा कौशल
  • कई ओपन सोर्स प्रोजेक्ट्स में मदद करना
  • मेरे गिथब प्रोफ़ाइल पर बहुत सी योगदान गतिविधि दिखाई जा रही है
  • वर्चुअल टूलबेल्ट के लिए एक और अच्छा 'स्विस-आर्मी नाइफ' टूल

और की जरूरत से इस दृष्टिकोण में मदद मिली थी

  • बिना धोखा दिए वास्तविक लक्ष्य प्राप्त करना
  • अधिक प्रेरणा के साथ अधिक से अधिक लक्ष्य के हिस्से के रूप में (रेगेक्स) कौशल का उपयोग करें।
  • दूसरों के कोड को बदलकर और फिर समीक्षा की गई परिवर्तनों को देखकर मैंने जो कौशल सीखा उसका प्रमाण दिखाने में सक्षम हो।

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

एक साइट पर कई भाषाओं में regexes

मैच समूहों पर ध्यान दें:


0

मैंने गुणन सारणी सीखने के समान नियमित अभिव्यक्ति सीखी है - हां, आपको इसके पीछे के विचारों को समझने की जरूरत है, लेकिन आखिरकार, आपको इसे अक्सर और बार-बार करना होगा।

जब मैं सीख रहा था, मैं खुद को प्रति दिन कुछ रेगेक्स अभ्यास करने का लक्ष्य निर्धारित करूंगा। व्यवहार में, इसका मतलब है कि दिन में कम से कम एक बार, मैं अपनी स्क्रीन पर एक स्ट्रिंग या पाठ को देखने की कोशिश करूंगा, और एक चुनौती के साथ आऊंगा - "क्या मुझे यहां से सभी ईमेल पते मिल सकते हैं", या "सभी खोजें" संज्ञा के बजाय 'कोड' शब्द का प्रयोग क्रिया के रूप में होता है, जैसे "सामान"।

यह करते हुए कि कुछ हफ्तों के लिए वास्तव में भुगतान किया गया है - और निश्चित रूप से, आवधिक समीक्षा और पुनश्चर्या की आवश्यकता है। मैं एक के कारण के बारे में हूँ।

मुझे यह ऑनलाइन टूल मददगार लगा, क्योंकि यह मुझे वास्तविक समय में regex का परीक्षण करने देता है: http://www.gethifi.com/tools/regex

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