क्या प्रत्येक प्रोग्रामर के लिए नियमित अभिव्यक्ति सीखना आवश्यक है? [बन्द है]


82

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

संबंधित सवाल:


55
मुझे व्यक्तिगत रूप से पता है कि वे क्या हैं, उनका उपयोग कब करना है और Google सिंटैक्स कैसे करना है। कहते हैं
Tyanna

35
यह सभी बिजली उपयोगकर्ताओं के लिए जरूरी है। और प्रोग्रामर को उत्पादक होने के लिए पावर उपयोगकर्ता होना चाहिए।
एसके-लॉजिक

8
आप उन्हें क्यों नहीं सीखना चाहेंगे? आप पहले से ही कम से कम एक स्थिति का सामना कर चुके हैं, जहां आपको उन्हें जानने से फायदा होगा। क्या यह इस कारण से नहीं है कि आप भविष्य में ऐसी ही स्थिति में खुद को पा सकते हैं?
फिशबॉसेटगॉर्डो

23
केवल वे जो पाठ के साथ काम करते हैं :)
स्टीव जैक्सन

जवाबों:


113

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

एक साक्षात्कारकर्ता के लिए, वे एक साक्षात्कार के दौरान अनुभव की जांच करने का एक अच्छा तरीका हैं। यदि आप किसी ऐसे व्यक्ति के अनुभव का दावा कर रहे हैं जो उन्हें नहीं समझता है, तो आपको और खुदाई करने की आवश्यकता है।


4
मैं सहमत हूं, यह किसी भी अनुभवी डेवलपर के लिए एक अच्छा सवाल है। लेकिन उनके बारे में काम करने के अनुभव के साथ एक ताजा स्नातक पूछना शायद थोड़ा अनुचित है - जब तक कि वे वास्तव में आवेदकों को बिना किसी व्यावहारिक प्रोग्रामिंग अनुभव के फ़िल्टर करना चाहते थे।
एसके-लॉजिक

2
@ एसके-तर्क: स्कूल पर निर्भर करता है। हम सभी के पास 2 वर्ष में एक अनिवार्य पाठ्यक्रम था जो नियमित अभिव्यक्तियों का बहुत भारी उपयोग करता था (मैं मानता हूँ, यही वह जगह है जहाँ मुझे उन पर हुक लगा;))। और कुछ वरिष्ठ स्तर के पाठ्यक्रमों ने उन्हें फिर से ऊपर लाया, हालांकि कभी भी तीव्रता से नहीं।
FrustratedWithFormsDesigner

उपरोक्त टिप्पणियों से सहमत - मैं नियमित रूप से नियमित रूप से अभिव्यक्ति जानने के लिए किसी को स्कूल से बाहर ताज़ा करने की उम्मीद नहीं करूँगा। लेकिन मैं अभी भी पूछ सकता हूँ।
ptyx

13
मैं एक गणितज्ञ हूं, इसलिए मेरे पास कंप्यूटर विज्ञान में कोई औपचारिक पृष्ठभूमि नहीं है, लेकिन मैंने सोचा होगा कि वास्तव में कॉलेज के पाठ्यक्रमों में regexes पढ़ाए जाते हैं, जबकि व्याकरण, पार्सर, ऑटोमेटास और व्हाट्सएप का उपयोग करते हुए। मुझे वास्तव में उम्मीद थी कि कॉलेज से बाहर के किसी भी व्यक्ति को बेहतर ज्ञान होगा जो बिना किसी सीएस के अध्ययन के साथ एक अनुभवी प्रोग्रामर है। : - /
एंड्रिया

8
@ और, जब मैं विश्वविद्यालय में था (कंप्यूटर विज्ञान में बी एस) नियमित रूप से व्याकरण और ऑटोमेटा के बारे में सीखते समय नियमित अभिव्यक्ति को कवर किया गया था। हालांकि, यह केवल औपचारिक अवधारणा थी जिसे कवर किया गया था, न कि अनुप्रयोग। हमने POSIX या पर्ल-संगत रेगुलर एक्सप्रेशन सिंटैक्स नहीं सीखा, या अपनी कोडिंग में उनका उपयोग कैसे किया जाए। हमने सीखा कि कैसे एक परिमित-राज्य ऑटोमेटन के एक राज्य आरेख को आकर्षित करना है, लिखना है कि एक नियमित अभिव्यक्ति के रूप में, आदि ग्रीक पत्र शामिल थे, न कि grep और पाठ फाइलें।
एडम जस्किविक्ज़

54

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


19
यह कहना उतना ही सत्य है जितना कि बूलियन लॉजिक को समझना उपयोगी है, लेकिन इसकी आवश्यकता नहीं है।
ओड

1
@Oded: मुझे अपने पाठ्यक्रम में पढ़ाए गए बूलियन तर्क के लिए कोई उपयोग नहीं मिला है।
डेडएमजी

16
@ डीडीएमजी, मैं हर समय बूलियन लॉजिक का उपयोग करता हूं, जैसे कि रूपांतरणों में: if (!(foo && bar))=> if (!foo || !bar)। हो सकता है कि आप इसका उपयोग कर रहे हों और आपको इसका एहसास नहीं हुआ हो, या हो सकता है कि आपको सही सामग्री नहीं सिखाई गई हो।
zzzzBov

7
संस्करण नियंत्रण की तरह? या सॉफ्टवेयर परीक्षण?
कोनराड रुडोल्फ

2
@ruakh - मैं मानता हूं कि वे बेहद उपयोगी हैं; मैं हर समय उनका खुद इस्तेमाल करता हूं। मुझे लगता है कि सभी प्रोग्रामर्स को यह सीखना चाहिए कि अपने करियर में किसी समय पर रेगीज़ का उपयोग कैसे करें। हालांकि, सवाल यह नहीं पूछा गया था।
पलक

33

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

लेकिन, यदि आप किसी भी प्रकार की सूचना प्रणाली में काम कर रहे हैं, और यदि आप नियमित अभिव्यक्ति नहीं जानते हैं, तो आप अपने आप को एक कार्य कर रहे हैं।

दूसरी तरफ, मैं आपके मानक IS प्रोग्रामर से मैट्रिक्स गणित के बारे में जानने की उम्मीद नहीं करूंगा जो एक गेम प्रोग्रामर करेगा। प्रोग्रामर के अलग-अलग विषय हैं, हालांकि हम में से "सूचना प्रणाली" छतरी के नीचे आते हैं।


1
LHC में प्रोग्रामर सेंसर द्वारा निर्मित डेटा फ़ाइलों के माध्यम से खोज करने के लिए नियमित अभिव्यक्ति का उपयोग कर सकते हैं। गेम्स प्रोग्रामर अपने गेम द्वारा निर्मित लॉग फाइलों को खोजने के लिए नियमित अभिव्यक्ति का उपयोग कर सकते हैं। ठीक है, उनके पास नहीं हो सकता है , लेकिन यह शायद ऐसे कार्यों को बहुत आसान बना सकता है।
फ्रस्ट्रेटेडविथफॉर्म्सडिजाइनर

1
मैं सहमत हूं, लेकिन अगर मैं एक गेम प्रोग्रामर की स्थिति के लिए साक्षात्कार कर रहा था, तो मैं अभी भी किसी को किराए पर लूंगा अगर वे नहीं जानते कि एक नियमित अभिव्यक्ति क्या थी। अगर मैं किसी पारंपरिक व्यवसाय प्रोग्रामिंग भूमिका में किसी को काम पर रख रहा था, जो नहीं जानता था कि नियमित अभिव्यक्ति क्या थी, तो वे शायद काम पर नहीं रखे जाएंगे।
जोनाथन रिच

मुझे लगता है कि उचित है।
FrustratedWithFormsDesigner

7
कण भौतिक विज्ञानी ज्यादातर यूनिक्स-एक जैसे वातावरण में काम करते हैं, लेकिन उस समुदाय के अन्य सभी कंप्यूटरों की तरह अधिकांश कौशल मौखिक परंपराओं द्वारा प्रसारित होते हैं। Regexps में परिष्कार के स्तर भिन्न होते हैं। लेकिन हम regexps के साथ डेटा नहीं खोजते हैं : इसमें बहुत अधिक है और यह पाठ प्रारूपों में नहीं है। हम लॉग और तदर्थ DBs और कोड और आधे-गधे के दस्तावेज़ों की खोज करते हैं, हर किसी की तरह।
dckckee

1
@FrustratedWithFormsDesigner, मैं एक खेल progrmmer कि regex पता नहीं था किराया नहीं होगा। प्रोग्रामिंग क्षेत्र की परवाह किए बिना अपनी प्रकृति-गहन जानकारी द्वारा है । इससे कोई फर्क नहीं पड़ता कि आप क्या करते हैं - किसी भी विषय में आपके पास स्रोत कोड, regex- सक्षम पाठ संपादक और लॉग फ़ाइलें हैं। Regex के बिना आप होगा निश्चित कार्य प्रदर्शन (भले ही आप भेज दिया खेल में regex की एक पंक्ति लिखने की जरूरत नहीं है) में काफी कम कुशल हो। मैं यह नहीं कह रहा कि रेगेक्स एक गेम प्रोग्रामर के लिए आवश्यक है। मैं सिर्फ यह कह रहा हूं कि मैं ऐसा नहीं करूंगा जो यह नहीं जानता।
बेन ली

22

पाठ में पैटर्न का मिलान कैसे किया जाए, इसे व्यक्त करने के लिए नियमित अभिव्यक्तियाँ एक बहुत ही जटिल तरीका है।

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

वे आपके टूलबॉक्स में रखने के लिए एक अच्छा उपकरण हैं और मैं किसी भी अनुभवी प्रोग्रामर से अपेक्षा करूंगा कि उन्हें कैसे उपयोग करना है।

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

आप ट्यूटोरियल को regular-expressions.info पर शुरू कर सकते हैं ।


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

15

यहाँ जवाब के बहुमत के विपरीत मुझे नहीं लगता कि reg exs का ज्ञान उत्पादक प्रोग्रामर बनने के लिए एक आवश्यक कौशल है। जब मैं किसी पद के लिए उम्मीदवारों का साक्षात्कार करता हूं तो मैं गहराई से खुदाई करूंगा यदि वे महसूस करते हैं कि वे अपने स्वयं के रेग के कौशल को लाने के लिए मजबूर हैं। क्यों? वे अक्सर स्थानों में उपयोग किए जाते हैं क्योंकि वे सही हथौड़ा पसंद करते हैं लेकिन अक्सर आपको जो चाहिए था वह एक स्क्रू ड्राइवर था। HTML और regex के लिए SO खोजें और आपको काफी कुछ प्रश्न दिखाई देंगे और कुछ कारण जो regex एक मिसफिट है।

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

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


नियमित अभिव्यक्ति को नहीं जानने वाले प्रोग्रामर अक्सर डब्ल्यूटीएफ का एक बड़ा ढेर बनाते हैं जब एक नियमित अभिव्यक्ति बहुत अच्छी तरह से काम करेगी। प्रोग्रामर जो केवल नियमित अभिव्यक्तियों को जानते हैं, वे अक्सर नियमित भावों के साथ गैर-नियमित भाषाओं (जैसे HTML) को संसाधित करने का प्रयास करने वाले डब्ल्यूटीएफ के छोटे लेकिन बड़े पैमाने पर गलत ढेर बनाते हैं।
केविन क्लाइन

14

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

यह व्यावहारिक प्रोग्रामर का अध्याय 3 है जो सादे पाठ के साथ "प्रोग्रामिंग का मूल कच्चा माल" होने की बात करता है।


आप केवल एक विचारधारा का उपयोग क्यों नहीं करते हैं जो रिफैक्टिंग का समर्थन करती है?
निमचम्प्सकी

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

10

जेफ एटवुड ने नियमित अभिव्यक्ति के बारे में एक महान ब्लॉग लिखा , इसमें यह अद्भुत उद्धरण है:

Some people, when confronted with a problem, think "I know, I'll use regular 
expressions." Now they have two problems. [Jamie Zawinski]

वहाँ भी एक अच्छा सवाल का एक बड़ा जवाब एक ढेर अतिप्रवाह आप बाहर की जाँच करना चाहते हो सकता है।

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

 

tl; डॉ

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


8

मैं एक एम्बेडेड कोड बेस में काम करता हूं जिसमें एक नियमित अभिव्यक्ति लाइब्रेरी उपलब्ध नहीं है। एक निश्चित कार्य को कोड की 275 लाइनों की आवश्यकता होती है, और सभी कोने के मामलों को डिबग करने के लिए लगभग दो सप्ताह लगते हैं, परीक्षक और डेवलपर के बीच आगे-पीछे। मैंने बाद में एक जावास्क्रिप्ट उपयोगिता के भाग के समान कार्य करने के लिए एक फ़ंक्शन लिखा। सटीक एक ही नियमित अभिव्यक्ति का उपयोग कर कार्य कोड के 10 लाइनों का इस्तेमाल किया और लगभग 15 मिनट में पूरी तरह से काम किया।

क्या आपको नियमित अभिव्यक्ति की आवश्यकता है ? तकनीकी रूप से नहीं, लेकिन यह जानबूझकर एक उपकरण से अनजान बना रहता है जो कुशल है।


6

एक अन्य उत्तर को उद्धृत करने के लिए:

पाठ में पैटर्न का मिलान कैसे किया जाए, इसे व्यक्त करने के लिए नियमित अभिव्यक्तियाँ एक बहुत ही जटिल तरीका है।

इसलिए यदि यह आपकी नौकरी का एक महत्वपूर्ण हिस्सा है तो संभवतः आपके द्वारा विकसित की जा रही प्रणाली को डिजाइन करने का एक बेहतर तरीका है। जब तक बहुत सारे पाठ आपके क्षेत्र (जैसे जैव सूचना विज्ञान) के लिए विशिष्ट डोमेन नहीं है।

मैंने तीन अलग-अलग एंटरप्राइज़ सिस्टम (दस वर्षों में तीन अलग-अलग कंपनियों में) पर काम किया है और मैंने उन्हें पाँच बार से कम लिखा है, और जिसमें दो बार एक बुनियादी ई-मेल सत्यापनकर्ता की प्रतिलिपि बनाना और चिपकाना शामिल है।


2
बहुत सारे पाठ हमेशा डोमेन विशिष्ट होते हैं। आप सभी के बाद एक प्रोग्रामर हैं । पाठ (स्रोत कोड के रूप में) आपका डोमेन है। नियमित रूप से अभिव्यक्ति के साथ कुशलता से छेड़छाड़ पाठ आपको अधिक कुशल प्रोग्रामर बनाता है।
क्वांटिकल

2
@quanticle जिसका कोई मतलब नहीं है। आप वास्तव में नियमित अभिव्यक्ति के साथ अपने स्रोत कोड में हेरफेर करते हैं? जो एक संपूर्ण दुःस्वप्न की तरह लगता है। नियमित अभिव्यक्तियाँ आपके कोड का हिस्सा हैं और आपका कोड डोमेन विशिष्ट डेटा के साथ इंटरैक्ट करता है।
निमशिम्प्सकी

3
मैं नियमित अभिव्यक्ति के साथ स्रोत कोड में हेरफेर करता हूं। हाथ से कोड के बड़े हिस्से को फिर से भरना थकाऊ और त्रुटि-प्रवण है। एक संपादक का उपयोग करना जो नियमित अभिव्यक्ति खोजने और बदलने का समर्थन करता है (संकेत: बहुत अधिक हर संपादक regexp को खोजने और बदलने का समर्थन करता है) रिफैक्टिंग को बहुत आसान बनाता है।
क्वांटिक

3
@ डंक वह यह नहीं कह रहा है कि यह एक परियोजना के जीवन पर एक बड़ी दक्षता हासिल है, बल्कि यह है कि यह एक छोटी अवधि में एक बड़ा लाभ हो सकता है। मैंने दर्जनों फाइलों में बदलावों के बावजूद सैकड़ों, यहां तक ​​कि हजारों में भी रिफैक्टरिंग की है। परियोजना के जीवनकाल में जो घंटे बचते हैं वे महत्वहीन हैं, लेकिन मैं निश्चित रूप से घंटों या दिनों को हाथ से उसी परिवर्तन को करने के लिए नहीं लेना चाहता था। आधुनिक आईडीई आपके लिए कुछ ऐसा कर सकता है, जिसके बिना आप एक रेगेक्स लिख सकते हैं, लेकिन आम तौर पर यह नहीं हो सकता है (उदाहरण के लिए एक सामान्य एसिगमेंट पैटर्न को रीवाइर करना)।
jmoreno

2
@NimChimpsky Regexps हर जगह काम करता है। आईडीई और रीफैक्टरिंग टूल केवल विशिष्ट भाषाओं के लिए काम करते हैं। उदाहरण के लिए, क्या आपका रीफैक्टरिंग टूल मुझे मेरे सभी टेम्प्लेट से गुजरने और एक स्ट्रिंग को ढूंढने / हटाने की अनुमति देगा, जो एक फोन नंबर ( साइटें.google.com/site/steveyegge2/… ) की तरह दिखता है ?
क्वांटिकल

4

नियमित अभिव्यक्तियों को बहुत उपयोगी, क्रॉस-लैंग्वेज, क्रॉस-प्लेटफॉर्म, प्रोसेसिंग टूल के रूप में सोचा जा सकता है। मैं अपने कोड में regex का उपयोग कर सकता हूं, मैं अपने संपादक में regex का उपयोग कर सकता हूं, मैं कमांडलाइन पर regex का उपयोग कर सकता हूं!

यह सिर्फ इतना नहीं है कि आपको जरूरत है, या उन्हें सीखना चाहिए। यह अधिक पसंद है

वाह! मैं प्यार करता हूँ!


4

आप एक महान प्रोग्रामर होने के लिए दिल से सभी छोटे regex quirks को जानने की जरूरत नहीं है, विशेष रूप से क्योंकि वे सभी differnt कार्यान्वयन और प्रोग्रामिंग भाषाओं के आसपास थोड़ा भिन्न होते हैं। आपको क्या जानने की जरूरत है?

  • नियमित एक्सप्रेशन और रीजैक्स क्या हैं।
  • वे किस तरह की कुशलता से काम करते हैं (नियमित भाषाओं को पार्स करना)
  • किस तरह की चीजें कमज़ोर हैं (नेस्टेड चीज़ों को पार्स करना, बैकरेन्स के टन का उपयोग करना)
  • जब भी आपको किसी को पढ़ने या लिखने की आवश्यकता होती है, तो सिंटैक्स पर जानकारी प्राप्त करें।

वैसे भी, आपको भी ज्यादा परेशान होने की जरूरत नहीं है क्योंकि इसे पहली बार में सीखने में बहुत मेहनत करनी पड़ेगी। सबसे सरल ऑपरेटरों ( ., *, |, (), आदि) लगभग सार्वभौमिक मौजूद हैं और एक जाना लंबे समय तक रास्ता!


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

3

जैसा कि पहले ही उल्लेख किया गया है कि रेगेक्स एक उपकरण है , एक बहुत ही उपयोगी उपकरण आईएमएचओ है।

इस उदाहरण पर विचार करें:

//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
} 

उदाहरण के लिए एक पंक्ति को इस 1000000.00 जैसे "1,000,000.00" में बदलने के लिए सिर्फ एक लाइन

किसी भी अन्य विधि का उपयोग करना कहीं अधिक जटिल होगा


2
और यह जटिल नहीं है? यह मानक रेगेक्स सेट में नहीं कई विशेष सुविधाओं का उपयोग करता है। एक साधारण लंबाई और भरने के लिए ठीक है
शाफ़्ट सनकी

2

यह एक जरूरी नहीं है। आपको बस उनके अस्तित्व के बारे में पता होना चाहिए और उनका उपयोग कब करना है। सिंटैक्स की बारीकियों को Google और ऑनलाइन टूल का उपयोग करके ढूंढना और प्राप्त करना आसान है।


2

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

एक वास्तविक प्रोग्रामर उनके नियमित भाव जानता है

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

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


इसके अलावा, शुरुआत में दिल से पूरा चश्मा सीखना निरर्थक है, क्योंकि इसमें कई अलग-अलग बोलियाँ हैं। इसके बजाय, मूल बातें सीखने पर ध्यान केंद्रित करने की कोशिश करें: (1) कुछ सरल regexps को शिल्प करें और इसका अर्थ जानें। * + {} [] () और - और कुछ बुनियादी कक्षाएं। (२) अपने हाथों पर दिए गए एक युक्ति के साथ, यह समझने की कोशिश करें कि आपके द्वारा आने वाले रेक्सक्स में क्या हो रहा है।
एरन सीडरहोम

Yr web dev में आप किस reg का उपयोग करते हैं। इसका मैं क्या करता हूं और मैंने 10years + में 5 बार उपयोग किया है।
NimChimpsky

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

-1 ऐसी बेहूदा अज्ञानी टिप्पणी के लिए "एक असली प्रोग्रामर ..."
डंक

उपयोगकर्ता इनपुट को मान्य करने के बजाय इसका सतही तरीका है और यदि आपके रेगेक्स 100% सही थे (ईमेल सत्यापन प्रसिद्ध है) तो मैंने वूल डब को अधिग्रहित कर लिया है। और मैं इसे "कई भाषाओं / स्थानों में कस्टम और परिवर्तनीय अनुवाद स्ट्रिंग" के रूप में नहीं देखता हूं, जो आप regex's - ertf का उपयोग करके भाषाओं के बीच अनुवाद करते हैं? आँकड़े उद्देश्य - आप नियमित अभिव्यक्ति के साथ आँकड़े करते हैं? Regexs के साथ रिव्यूइंग लिंक / कंटेंट मेरे लिए एक कोड गंध की तरह लगता है।
निमचिम्प्सकी

1

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


1

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

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

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

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


1

संक्षिप्त उत्तर: नहीं, लेकिन .... ज्ञान शक्ति है।

मैं एक वेब डेवलपर हूं और मुझे कोई भी रेगुलर एक्सप्रेशन मिलता है जिसकी मुझे आमतौर पर पहले से जरूरत होती है। हालाँकि, मुझे कॉपी करने और चिपकाने और यह महसूस करने और कि यह क्या कर रहा है या नहीं, के बारे में समस्या है, जो किसी भी चीज़ को कॉपी और पेस्ट करने का खतरा है।

एक उदाहरण: एक ई-मेल regex जिसे मैंने कॉपी किया और चिपकाया था, वह ईमेल में एक अवधि या प्लस के लिए अनुमति नहीं देता था जिसे ईमेल पते की युक्ति में अनुमति दी जाती है। वास्तव में बहुत से लोग gmail का उपयोग realemail+sitename@gmail.com के साथ करते हैं ताकि should साइटनेम ’को फ़िल्टर करना आसान हो जाए, क्या उन्हें स्पैम का चयन करना चाहिए।


0

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

लेकिन फॉर्मूलरों के सत्यापन में या इसके बहुत उपयोगी डेटा के लिए। मुझे लगता है कि हर पेशेवर फॉर्म को रेगेक्स के साथ मान्य किया जाता है। इसका उपयोग करते हुए ASP.NET।

लेकिन बिल्कुल भी: जब आपको इसकी आवश्यकता हो तो एक अभिव्यक्ति करने की कोशिश करें और इसे बचाएं। आप उन्हें एक से अधिक बार उम्मीद से उपयोग करेंगे। लेकिन RegEx के साथ अपना समय बर्बाद मत करो!


0

यह उस क्षेत्र / मंच पर निर्भर करता है जिसमें आप काम कर रहे हैं

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

  2. एक वेब डेवलपर के रूप में आपको सबसे अधिक संभावना होगी कि आप रेगुलर एक्सप्रेशन सीखें। आप इसके साथ दूर हो सकते हैं क्योंकि आप आसानी से कोड स्निपेट ऑनलाइन पा सकते हैं जो आपको पर्याप्त होगा लेकिन सीखने में मदद मिलेगी।

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

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


0

नियमित अभिव्यक्ति बहुत उपयोगी उपकरण हैं, और बहुत सारी स्थितियां हैं, जब प्रोग्रामर को उनका उपयोग करना चाहिए। आपको उन सभी का उपयोग दिल से नहीं करना चाहिए। बस संदर्भ का उपयोग करें और अपना कार्य करें। 10-20-50-100 (प्रोग्रामर के आधार पर) कार्यों के बाद जहां आपने नियमित अभिव्यक्ति का उपयोग किया है, आप उन सभी को दिल से जानेंगे। वे स्वयं सीख रहे हैं, आपको उन्हें विशेष रूप से नहीं सीखना चाहिए।


0

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

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

वे सामान्य रूप से पार्सिंग को बेहतर ढंग से समझने में सक्षम हो जाते हैं, जो सिर्फ हर तरह की प्रोग्रामिंग के लिए उपयोगी है, और बेहतर तरीके से समझते हैं कि हम एक नियमित आधार (कंपाइलर, एडिटर, ब्राउज़र, आदि) पर काम करने वाले उपकरणों का उपयोग कैसे करते हैं।

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

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


0

रोब पाइक ऐसा नहीं लगता :

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

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

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

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


0

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

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