रेगुलर एक्सप्रेशन (Regex) शुरुआती गाइड
रेगुलर एक्सप्रेशन (regex) एक कॉम्पैक्ट पैटर्न है जो स्ट्रिंग के सेट का वर्णन करता है। एक एक्सप्रेशन लॉग में हर ईमेल एड्रेस ढूँढ सकता है, फ़ोन नंबर फ़ील्ड वैलिडेट कर सकता है, URL से ऑर्डर id निकाल सकता है या एक साथ हज़ार फ़ाइलें रीनेम कर सकता है। हर मुख्य लैंग्वेज — JavaScript, Python, Java, Go, C#, PHP — और हर एडिटर व कमांड-लाइन टूल एक ही कोर सिंटैक्स समझता है।
यह गाइड वही कोर सिखाती है: लिटरल कैरेक्टर, कैरेक्टर क्लास, क्वांटिफ़ायर, एंकर, ग्रुप और फ़्लैग — चीट शीट, कॉपी करने लायक पैटर्न, और वे गलतियाँ जिनसे regex बहुत ज़्यादा या बहुत कम मैच करता है।
लिटरल कैरेक्टर और मेटाकैरेक्टर
ज़्यादातर कैरेक्टर खुद से मैच करते हैं: पैटर्न cat "concatenate" के अंदर "cat" से मैच करता है। बारह कैरेक्टर स्पेशल हैं और उन्हें लिटरली मैच करने के लिए बैकस्लैश से एस्केप करना पड़ता है: . ^ $ * + ? ( ) [ ] { } | \ और /। डॉट सबसे ज़्यादा धोखा देता है — a.b "a", फिर कोई भी कैरेक्टर, फिर "b" से मैच करता है, इसलिए "a.b" "aXb" से भी मैच करता है।
colou?r matches "color" and "colour"
\d{3}-\d{4} matches 555-1234
\. matches a literal dot
https?:// matches http:// and https://कैरेक्टर क्लास
- [abc] — a, b या c में से एक। [a-z] — कोई भी लोअर-केस अक्षर। [^0-9] — अंक के अलावा कुछ भी।
- \d — अंक [0-9]। \w — वर्ड कैरेक्टर [A-Za-z0-9_]। \s — व्हाइटस्पेस (स्पेस, टैब, न्यूलाइन)। अपर केस उल्टा करता है: \D, \W, \S।
- . — न्यूलाइन के अलावा कोई भी कैरेक्टर (जब तक s फ़्लैग सेट न हो)।
- Unicode — JavaScript में u फ़्लैग इस्तेमाल करें और किसी भी अक्षर के लिए \p{L}, हिंदी के लिए \p{Script=Devanagari}, अरबी के लिए \p{Script=Arabic}। इसके बिना \w सिर्फ़ ASCII मैच करता है।
क्वांटिफ़ायर: कितनी बार
- * — शून्य या ज़्यादा। + — एक या ज़्यादा। ? — शून्य या एक।
- {3} — ठीक तीन। {2,5} — दो से पाँच। {2,} — दो या ज़्यादा।
- क्वांटिफ़ायर लालची (greedy) होते हैं: .* जितना हो सके उतना लेता है। आलसी (lazy) बनाने के लिए ? जोड़ें: .*? पहले मौके पर रुक जाता है। "<a><b>" पर <.+> पूरी स्ट्रिंग मैच करता है; <.+?> "<a>" मैच करता है।
एंकर, ग्रुप और ऑल्टरनेशन
- ^ — स्ट्रिंग की शुरुआत (m फ़्लैग के साथ लाइन की)। $ — अंत। \b — वर्ड बाउंड्री, इसलिए \bcat\b "cat" मैच करता है लेकिन "concatenate" नहीं।
- ( ) — कैप्चरिंग ग्रुप: (\d{4})-(\d{2}) साल और महीना अलग-अलग कैप्चर करता है। (?: ) बिना कैप्चर ग्रुप करता है। (?<year>\d{4}) ग्रुप को नाम देता है।
- | — ऑल्टरनेशन: jpg|png|gif तीनों में से किसी से मैच करता है। स्कोप सीमित करने के लिए ग्रुप में लपेटें: \.(jpg|png|gif)$।
- (?=…) और (?!…) — लुकअहेड: सिर्फ़ तब मैच करें जब आगे का हिस्सा मैच करे (या न करे), उसे कंज़्यूम किए बिना। पासवर्ड नियमों में इस्तेमाल: ^(?=.*\d)(?=.*[A-Z]).{12,}$।
फ़्लैग
- i — केस-इनसेंसिटिव। g — ग्लोबल (सिर्फ़ पहला नहीं, सभी मैच ढूँढें)। m — मल्टीलाइन: ^ और $ लाइन बाउंड्री पर मैच करते हैं।
- s — डॉटऑल: . न्यूलाइन से भी मैच करता है। u — Unicode मोड। x (कुछ इंजन) — पैटर्न में व्हाइटस्पेस नज़रअंदाज़ और कमेंट की अनुमति।
कॉपी करने लायक पैटर्न
Email (practical): ^[^\s@]+@[^\s@]+\.[^\s@]{2,}$
Indian mobile: ^(?:\+91|0)?[6-9]\d{9}$
Saudi mobile: ^(?:\+966|0)5\d{8}$
ISO date: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
UUID: ^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
URL (loose): ^https?://[^\s/$.?#].[^\s]*$
Hex color: ^#(?:[0-9a-fA-F]{3}){1,2}$
Strong password: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\w\s]).{12,}$
Trim whitespace: ^\s+|\s+$
Extract order id: /orders/(\d+)वे गलतियाँ जिनसे बहुत ज़्यादा या बहुत कम मैच होता है
- एंकर भूलना: \d{4} 12345 को "वैलिडेट" कर देता है क्योंकि उसके अंदर 1234 मिल जाता है। ^\d{4}$ इस्तेमाल करें।
- बिना एस्केप डॉट: example.com "exampleXcom" से मैच करता है। example\.com लिखें।
- पूरी लाइन में लालची क्वांटिफ़ायर: दो कोटेड स्ट्रिंग वाली लाइन पर "(.*)" दोनों कैप्चर कर लेता है।
- कैटास्ट्रोफ़िक बैकट्रैकिंग: (a+)+ जैसे नेस्टेड क्वांटिफ़ायर न मैच करने वाले इनपुट पर सेकंडों ले सकते हैं या हैंग हो सकते हैं। क्वांटिफ़ायर सरल रखें और लंबे इनपुट से टेस्ट करें।
- विशाल पैटर्न से ईमेल वैलिडेट करना: ऊपर का प्रैक्टिकल पैटर्न और एक कन्फ़र्मेशन ईमेल 400-कैरेक्टर regex से बेहतर है जो फिर भी वैध एड्रेस रिजेक्ट करता है।
- लोकेल की धारणाएँ: Unicode मोड के बिना \w हिंदी या अरबी अक्षरों से मैच नहीं करता।
अक्सर पूछे जाने वाले सवाल
रेगुलर एक्सप्रेशन किस काम आता है?
पैटर्न फ़ॉलो करने वाले टेक्स्ट को ढूँढने, वैलिडेट करने, निकालने और बदलने में: फ़ॉर्म वैलिडेशन, लॉग सर्च, स्ट्रिंग से id निकालना, बल्क रीनेम और एडिटर में सर्च-एंड-रिप्लेस।
regex में \d का क्या मतलब है?
कोई एक अंक, 0–9। \d{3} का मतलब ठीक तीन अंक; \d+ का मतलब एक या ज़्यादा।
regex में * और + में क्या फ़र्क़ है?
* शून्य या ज़्यादा दोहराव मैच करता है (एलिमेंट गैरहाज़िर भी हो सकता है); + कम से कम एक माँगता है।
क्या regex हर लैंग्वेज में एक जैसा है?
कोर सिंटैक्स साझा है, लेकिन डिटेल अलग हैं: लुकबिहाइंड सपोर्ट, नेम्ड ग्रुप, Unicode क्लास और फ़्लैग JavaScript, Python (re), Java, PCRE (PHP) और Go (RE2, जिसमें बैकट्रैकिंग नहीं) में अलग होते हैं।
regex कैसे टेस्ट करें?
पैटर्न और सैंपल टेक्स्ट को ऐसे टेस्टर में पेस्ट करें जो मैच और ग्रुप हाइलाइट करे, फिर ऐसे इनपुट आज़माएँ जिन्हें मैच नहीं करना चाहिए। परफ़ॉर्मेंस समस्याएँ पकड़ने के लिए लंबे और असामान्य इनपुट शामिल करें।
क्या HTML या JSON पार्स करने के लिए regex इस्तेमाल कर सकते हैं?
एक बार के तेज़ एक्सट्रैक्शन के लिए, हाँ। किसी भरोसेमंद चीज़ के लिए, नहीं — नेस्टेड स्ट्रक्चर को असली पार्सर चाहिए। JSON के लिए JSON ट्री व्यूअर या JSONPath इस्तेमाल करें।
इस गाइड में बताए गए टूल्स
रेगुलर एक्सप्रेशन को लाइव टेस्ट करें — मैच हाइलाइटिंग, कैप्चर ग्रुप और रिप्लेस प्रीव्यू के साथ।
किसी भी रेगुलर एक्सप्रेशन की टोकन-दर-टोकन, आसान भाषा में व्याख्या पाएँ।
टेस्ट किए हुए पैटर्न की लाइब्रेरी (ईमेल, URL, IP, तारीख़ें, IBAN, सऊदी/जॉर्डन फ़ोन नंबर…) और कस्टम नियमों से रेगुलर एक्सप्रेशन बनाएँ।
दो टेक्स्ट की लाइन-दर-लाइन या शब्द-दर-शब्द तुलना करें और अंतर हाइलाइट करें।
JSON पर JSONPath एक्सप्रेशन ($.store.book[*].author) चलाएँ और मैच लाइव देखें।