रेगुलर एक्सप्रेशन की प्रतिष्ठा यादृच्छिक शोर जैसे दिखने की है। ^[\w.-]+@[\w-]+\.\w{2,}$ जैसा पैटर्न ऐसा लग सकता है जैसे बिल्ली कीबोर्ड पर चली हो। लेकिन गूढ़ सिंटैक्स के पीछे एक अद्भुत रूप से सुरुचिपूर्ण विचार छिपा है: टेक्स्ट में पैटर्न का वर्णन करने की एक संक्षिप्त भाषा।
चाहे आप फ़ॉर्म इनपुट वैलिडेट कर रहे हों, लॉग फ़ाइलें खोज रहे हों, डेटा साफ़ कर रहे हों, या कोडबेस में फ़ाइंड-एंड-रिप्लेस कर रहे हों, regex एक डेवलपर के टूलकिट में सबसे बहुमुखी उपकरणों में से एक है। और वास्तविक मूल्य प्राप्त करने के लिए आपको हर अस्पष्ट सुविधा याद रखने की ज़रूरत नहीं है। कुछ बुनियादी बिल्डिंग ब्लॉक व्यावहारिक उपयोग के अधिकांश मामलों को कवर करते हैं।
Regex वास्तव में क्या करता है
एक रेगुलर एक्सप्रेशन (regex या regexp) एक पैटर्न है जो स्ट्रिंग के एक सेट का वर्णन करता है। आप इसे एक सर्च इंजन को प्रदान करते हैं — अपनी प्रोग्रामिंग भाषा, टेक्स्ट एडिटर, या कमांड-लाइन टूल में — और यह हर मिलान करने वाली स्ट्रिंग खोजता है।
इसे एक अपग्रेडेड सर्च क्वेरी के रूप में सोचें:
- सामान्य खोज: सटीक शब्द "error" खोजें
- Regex खोज: कुछ भी खोजें जो IP एड्रेस, तिथि, ईमेल एड्रेस, या आपके द्वारा वर्णित किसी भी संरचना जैसा दिखता हो
गणितज्ञ स्टीफ़न क्लीन ने 1956 में regex का आविष्कार किया और यह 1960 के दशक में Unix टेक्स्ट एडिटर के माध्यम से कंप्यूटिंग में आया। आज इसे लगभग हर प्रोग्रामिंग भाषा और टेक्स्ट एडिटर में समर्थन प्राप्त है।
बिल्डिंग ब्लॉक
शाब्दिक अक्षर
सबसे सरल regex सादा टेक्स्ट है। पैटर्न hello स्ट्रिंग "hello" को जहाँ भी दिखाई दे मिलाता है। कुछ भी फ़ैंसी नहीं।
डॉट (.) — कोई भी अक्षर
डॉट न्यूलाइन को छोड़कर किसी भी एकल अक्षर को मिलाता है।
h.t"hat", "hit", "hot", "h3t", और यहाँ तक कि "h t" से मिलता है
कैरेक्टर क्लास ([])
वर्ग कोष्ठक एक स्थान पर अनुमत अक्षरों का सेट परिभाषित करते हैं।
[aeiou]— कोई भी स्वर[0-9]— कोई भी अंक[A-Za-z]— कोई भी अक्षर[^0-9]— कोई भी अक्षर जो अंक नहीं है (कोष्ठक के अंदर^का अर्थ "नहीं" है)
शॉर्टहैंड क्लास
| शॉर्टहैंड | अर्थ | समतुल्य |
|---|---|---|
\d |
कोई अंक | [0-9] |
\w |
शब्द अक्षर | [A-Za-z0-9_] |
\s |
व्हाइटस्पेस | [ \t\n\r] |
\D |
अंक नहीं | [^0-9] |
\W |
शब्द अक्षर नहीं | [^A-Za-z0-9_] |
\S |
व्हाइटस्पेस नहीं | [^ \t\n\r] |
क्वांटिफ़ायर — कितने
क्वांटिफ़ायर नियंत्रित करते हैं कि पूर्ववर्ती तत्व कितनी बार दिखाई देना चाहिए।
| चिह्न | अर्थ | उदाहरण | मिलाता है |
|---|---|---|---|
* |
शून्य या अधिक | ab*c |
"ac", "abc", "abbc" |
+ |
एक या अधिक | ab+c |
"abc", "abbc" ("ac" नहीं) |
? |
शून्य या एक | colou?r |
"color" और "colour" |
{3} |
बिल्कुल 3 | \d{3} |
"123", "456" |
{2,4} |
2 से 4 के बीच | \d{2,4} |
"12", "123", "1234" |
एंकर — स्थिति
^— स्ट्रिंग की शुरुआत (याmफ़्लैग के साथ लाइन)$— स्ट्रिंग का अंत (या लाइन)\b— शब्द सीमा
पैटर्न ^\d{4}$ ऐसी स्ट्रिंग से मिलता है जो ठीक चार अंक है, जैसे "2026", लेकिन "abc2026" या "2026xyz" से नहीं।
ग्रुप और ऑल्टरनेशन
(abc)— "abc" को ग्रुप के रूप में कैप्चर करता हैa|b— "a" या "b" से मिलता है(cat|dog)— "cat" या "dog" से मिलता है
ग्रुप अनुक्रमों पर क्वांटिफ़ायर लागू करने की भी अनुमति देते हैं: (ha)+ "ha", "haha", "hahaha" से मिलता है।
सामान्य व्यावहारिक पैटर्न
ईमेल वैलिडेट करें (बुनियादी)
^[\w.-]+@[\w-]+\.\w{2,}$
यह user@example.com, first.last@company.co.uk (आंशिक रूप से) से मिलता है, और @ या डोमेन के बिना स्ट्रिंग को अस्वीकार करता है।
महत्वपूर्ण: Regex से ईमेल एड्रेस को पूरी तरह वैलिडेट करना कुख्यात रूप से कठिन है — पूर्ण RFC 5322 विनिर्देश अत्यंत जटिल है। उत्पादन प्रणालियों के लिए, फ़ॉर्मेट जाँच के लिए बुनियादी regex उपयोग करें और फिर पुष्टिकरण ईमेल भेजकर पते को सत्यापित करें।
फ़ोन नंबर मिलाएँ
\+?\d{1,3}[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}
यह +1 555 123 4567, 555-123-4567, और (555) 123-4567 जैसे फ़ॉर्मेट को संभालता है।
URL मिलाएँ
https?://[\w.-]+(/[\w./?&=-]*)?
https://example.com, http://example.com/path?q=hello से मिलता है।
तिथि मिलाएँ (YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
2026-03-29, 1999-12-31 से मिलता है। नोट: यह केवल फ़ॉर्मेट जाँचता है, वैधता नहीं — यह 9999-99-99 से भी मिलेगा।
व्यवहार बदलने वाले फ़्लैग
अधिकांश regex इंजन फ़्लैग का समर्थन करते हैं जो पैटर्न लागू करने के तरीके को संशोधित करते हैं:
| फ़्लैग | नाम | प्रभाव |
|---|---|---|
g |
Global | सभी मिलान खोजें, केवल पहला नहीं |
i |
केस-असंवेदनशील | hello "Hello", "HELLO" आदि से मिलता है |
m |
Multiline | ^ और $ प्रत्येक लाइन की शुरुआत/अंत से मिलते हैं |
s |
Dotall | . न्यूलाइन अक्षरों से भी मिलता है |
JavaScript में, फ़्लैग क्लोज़िंग स्लैश के बाद जोड़े जाते हैं: /hello/gi। Python में, वे तर्क के रूप में पास किए जाते हैं: re.findall(r"hello", text, re.IGNORECASE)।
जब regex ज़रूरत से ज़्यादा हो
Regex शक्तिशाली है, लेकिन यह हमेशा सही उपकरण नहीं है:
- HTML या XML पार्स करना। उचित DOM पार्सर उपयोग करें। Regex नेस्टेड टैग को विश्वसनीय रूप से संभाल नहीं सकता।
- JSON पार्स करना।
JSON.parse()या समकक्ष उपयोग करें। Regex किनारे के मामलों पर टूटेगा। - जटिल वैलिडेशन। यदि आपका पैटर्न कई लाइनों में फैला है और पढ़ने में पाँच मिनट लगते हैं, तो इसके बजाय प्रक्रियात्मक वैलिडेशन कोड लिखने पर विचार करें।
- सरल स्ट्रिंग ऑपरेशन। यदि आपको बस
startsWith(),includes(), याsplit()चाहिए, तो सादी स्ट्रिंग विधियाँ स्पष्ट और तेज़ हैं।
सामान्य गलतियाँ
- विशेष अक्षरों को एस्केप करना भूलना। डॉट
.किसी भी अक्षर से मिलता है। शाब्दिक डॉट मिलाने के लिए\.उपयोग करें।(,),[,],+,*,?,{,},^,$,|, और\के लिए भी यही। - ग्रीडी बनाम लेज़ी मैचिंग। डिफ़ॉल्ट रूप से,
.*ग्रीडी है — यथासंभव अधिक मिलाता है। इसे लेज़ी बनाने के लिए?जोड़ें:.*?यथासंभव कम मिलाता है। डेलिमीटर के बीच सामग्री निकालते समय यह महत्वपूर्ण है। - विनाशकारी बैकट्रैकिंग।
(a+)+जैसे नेस्टेड क्वांटिफ़ायर कुछ इनपुट पर इंजन को पथों की तेज़ी से बढ़ती संख्या आज़माने का कारण बन सकते हैं, जिससे आपका प्रोग्राम फ़्रीज़ हो जाता है। ओवरलैपिंग पैटर्न पर नेस्टेड रिपीटिशन से बचें। - एंकर भूलना।
^और$के बिना, आपका पैटर्न सबस्ट्रिंग से मिलता है।\d{3}"abc12345" के अंदर "123" से मिलता है। सटीक मिलान के लिए^\d{3}$उपयोग करें।
आगे पढ़ें
Regex सीखने का सबसे अच्छा तरीका प्रयोग करना है। एक पैटर्न टाइप करें, कुछ टेस्ट टेक्स्ट पेस्ट करें, और देखें कि क्या हाइलाइट होता है। तब तक समायोजित करें और दोहराएँ जब तक आप समझ न लें कि हर टुकड़ा कैसे काम करता है।
- Regex पैटर्न कैसे टेस्ट करें — उदाहरणों के साथ इंटरैक्टिव ट्यूटोरियल
- Regex टेस्टर — अपना पैटर्न और टेस्ट डेटा पेस्ट करें, रियल टाइम में मिलान हाइलाइट देखें
