133 रेगुलर एक्सप्रेशन
संकेतन से लेकर ईमेल, तारीख़ और पते की जाँच तक। हर एक्सप्रेशन के साथ मिलने वाले और न मिलने वाले उदाहरण हैं, और जाँच उन्हें सचमुच चलाती है।
संकेतन28
एक वर्ण को कैसे इंगित करें। बाक़ी सब इसी पर टिका है।
\dएक अंक\Dअंक के अलावा कुछ भी\wअक्षर, अंक या अंडरस्कोर\Wशब्द-वर्ण के अलावा\sएक रिक्त स्थान\Sरिक्त स्थान के अलावा^.$कोई भी एक वर्ण^[a-z]+$सिर्फ़ छोटे अक्षर^[A-Z]+$सिर्फ़ बड़े अक्षर^[A-Za-z0-9]+$सिर्फ़ अक्षर और अंक^[^0-9]+$बिना किसी अंक वाला पाठ^[가-힣]+$सिर्फ़ हंगुल^[ぁ-んァ-ヶー]+$सिर्फ़ काना^[\u4e00-\u9fff]+$सिर्फ़ चीनी वर्ण^a\.b$वास्तविक बिंदु^a/b$वास्तविक स्लैश\tएक टैब\nएक लाइन ब्रेक\r\nविंडोज़ की लाइन ब्रेक^\u00e9$कोड पॉइंट से लिखा वर्ण^Helloइस शब्द से शुरू होता पाठworld$इस शब्द से ख़त्म होता पाठ^cat$ठीक यही शब्द, और कुछ नहीं\bcat\bअलग खड़ा शब्द, किसी दूसरे के भीतर नहीं\Bcatसिर्फ़ किसी शब्द के भीतर^cat$बड़े-छोटे अक्षर की परवाह किए बिना मिलान^bहर पंक्ति की शुरुआत^a.b$हर वर्ण, लाइन ब्रेक समेतदोहराव और समूह17
कोई चीज़ कितनी बार दोहराती है और एक इकाई क्या मानी जाए।
^ab*c$शून्य या अधिक बार^ab+c$एक या अधिक बार^colou?r$वैकल्पिक अक्षर^\d{4}$ठीक चार अंक^\d{2,4}$दो से चार अंक^\d{2,}$दो या अधिक अंक<.+?>जितना छोटा हो सके, एक टैग^<.+>$जितना बड़ा हो सके, एक हिस्सा^(?:cat|dog)$दो में से कोई एक^(?:ab)+$दो अक्षरों का समूह, दोहराया हुआ^(\d{3})-(\d{4})$दो हिस्से अलग-अलग पकड़े^(?:\d{3}-)+\d{4}$समूह बनाना, पर पकड़ना नहीं^(?<year>\d{4})-(?<month>\d{2})$नाम देकर पकड़ना(\w)\1लगातार दो बार वही वर्ण\b(\w+)\s+\1\bदो बार लिखा गया वही शब्द^(?:https?://)?example\.com$स्कीम के साथ या बिना पता^(?:\d{1,3}\.){3}\d{1,3}$चार हिस्सों वाला पताआगे-पीछे देखना8
आगे या पीछे क्या है यह जाँचता है, पर उसे लेता नहीं। शर्तें जोड़ने में काम आता है।
\d+(?= dollars)जिसके बाद कोई ख़ास शब्द हो, वह संख्या^(?!admin$).+$इस एक शब्द को छोड़कर सब(?<=\$)\d+जिसके पहले कोई ख़ास चिह्न हो, वह संख्या(?<!\$)\b\d+जिसके पहले वह चिह्न न हो, वह संख्या^(?=.*[A-Z])(?=.*\d)(?=.*[a-z]).{8,}$बड़े, छोटे अक्षर और अंक सहित आठ या अधिक वर्ण^(?!.* ).+$जिसमें कहीं दोहरा स्थान न हो^(?=.*@).+$जिसमें यह चिह्न होना ही चाहिए\B(?=(\d{3})+(?!\d))जहाँ हज़ार का अल्पविराम लगेगापूरी स्ट्रिंग की जाँच44
दोनों सिरों पर लंगर — पूरी स्ट्रिंग मिलनी चाहिए। इनपुट जाँच यही इस्तेमाल करती है।
^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$एक ईमेल पता^https?://[^\s/$.?#][^\s]*$एक वेब पता^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$एक डोमेन नाम^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$एक IPv4 पता^(?:[0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$पूरा लिखा IPv6 पता^(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}$एक MAC पता^(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]?\d{1,4})$एक पोर्ट नंबर^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$एक UUID^#(?:[0-9a-f]{3}|[0-9a-f]{6})$हेक्स रंग कोड^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$rgb() रंग मान^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$ISO रूप में तारीख़^(?:0[1-9]|[12]\d|3[01])/(?:0[1-9]|1[0-2])/\d{4}$स्लैश से लिखी तारीख़^(?:[01]\d|2[0-3]):[0-5]\d$24 घंटे वाला समय^(?:0?[1-9]|1[0-2]):[0-5]\d\s?(?:am|pm)$am/pm सहित समय^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$पूरा ISO टाइमस्टैम्प^P(?=\d|T\d)(?:\d+Y)?(?:\d+M)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$ISO अवधि^\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?(?:\+[0-9a-z.-]+)?$सिमैंटिक संस्करण संख्या^\d+$बिना चिह्न वाला पूर्णांक^[+-]?\d+$चिह्न ले सकने वाला पूर्णांक^-?\d+(?:\.\d+)?$दशमलव वाला संभावित अंक^-?\d+(?:\.\d+)?[eE][+-]?\d+$वैज्ञानिक संकेतन में संख्या^(?:100(?:\.0+)?|\d{1,2}(?:\.\d+)?)%$0 से 100 तक प्रतिशत^\d{1,3}(?:,\d{3})*$अल्पविराम से समूहित संख्या^[$€£¥₩]\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$मुद्रा चिह्न सहित राशि^[0-9a-f]+$हेक्साडेसिमल स्ट्रिंग^[01]+$सिर्फ़ 0 और 1 की स्ट्रिंग^[0-7]+$ऑक्टल स्ट्रिंग^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$base64 में एन्कोडेड स्ट्रिंग^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*$दो बिंदुओं से बँटा JWT^\+[1-9]\d{7,14}$अंतरराष्ट्रीय रूप में फ़ोन नंबर^[a-z][a-z0-9_]{2,15}$अक्षर से शुरू होने वाला यूज़रनेम^[a-z0-9]+(?:-[a-z0-9]+)*$URL स्लग^[^\\/:*?"<>|]+\.[a-z0-9]+$एक्सटेंशन सहित फ़ाइल नाम^.+\.(?:jpe?g|png|gif|webp|avif|svg)$छवि फ़ाइल एक्सटेंशन^/(?:[^/\0]+/)*[^/\0]*$यूनिक्स शैली का पथ^[A-Za-z]:\\(?:[^\\/:*?"<>|]+\\)*[^\\/:*?"<>|]*$विंडोज़ पथ^</?[a-z][a-z0-9]*(?:\s[^<>]*)?/?>$एक HTML टैग^\.-?[_a-z][_a-z0-9-]*$CSS क्लास सेलेक्टर^M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})$रोमन अंक^-?(?:90(?:\.0+)?|[1-8]?\d(?:\.\d+)?)$अक्षांश मान^-?(?:180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$देशांतर मान^(?:0|[1-9]\d*)$बिना शुरुआती शून्य वाली संख्या^\d*[02468]$सम संख्या^\s*$ख़ाली पंक्तिखोजना और साफ़ करना36
बड़े पाठ में से सिर्फ़ ज़रूरी हिस्सा निकालने या हटाने के लिए।
\s+$पंक्ति के अंत में बचा स्थान^\s+पंक्ति की शुरुआत का स्थान^\s+|\s+$दोनों सिरों का स्थान\s{2,}लगातार दो या अधिक स्थान\n\s*\nदो पंक्तियों के बीच ख़ाली पंक्ति\D+जो अंक नहीं है[^\x00-\x7F]ASCII से बाहर का वर्ण[\x00-\x1F]अदृश्य नियंत्रण वर्ण</?[^>]+>पाठ के HTML टैग<!--[\s\S]*?-->HTML टिप्पणी//.*$दो स्लैश से शुरू टिप्पणी/\*[\s\S]*?\*/कई पंक्तियों की टिप्पणी"[^"\\]*(?:\\.[^"\\]*)*"दोहरे उद्धरण में पाठ'[^'\\]*(?:\\.[^'\\]*)*'एकल उद्धरण में पाठ\[([^\]]+)\]\(([^)]+)\)मार्कडाउन लिंक^#{1,6}\s+.+$मार्कडाउन शीर्षक पंक्ति(?:^|\s)#([a-z0-9_]+)हैशटैग(?:^|\s)@([a-z0-9_]{2,})@ मेंशन[?&]([^=&]+)=([^&]*)URL का क्वेरी पैरामीटरhttps?://[^\s<>"]+सामान्य पाठ में छिपी URL^https?://([^/:?#]+)URL से सिर्फ़ डोमेन\.([a-z0-9]+)$फ़ाइल नाम का एक्सटेंशन(?<=[a-z0-9])(?=[A-Z])camelCase में शब्दों की संधि_([a-z])अंडरस्कोर के बाद का अक्षर-([a-z])हाइफ़न के बाद का अक्षर(?:^|,)("(?:[^"]|"")*"|[^,]+)अल्पविराम से अलग एक फ़ील्ड^([^=]+)=(.*)$बराबर चिह्न से बँटा नाम और मान^\s*(\S+)पहला शब्द(\S+)\s*$आख़िरी शब्द\d+पाठ में अंकों के समूह\b\w+\bहर शब्द, एक-एक करके\[([^\]]*)\]वर्ग कोष्ठक के भीतर की सामग्री\(([^)]*)\)गोल कोष्ठक के भीतर की सामग्री[\uD800-\uDBFF][\uDC00-\uDFFF]दो कोड यूनिट वाला इमोजी(.)\1{2,}लगातार तीन या अधिक बार वही वर्ण,\s*([}\]])बंद करने से पहले बची अल्पविरामकैसे पढ़ें
- ^ और $ लगे हों तो पूरी स्ट्रिंग मिलनी चाहिए; न हों तो मिलान कहीं भी हो सकता है। जाँच के लिए इस्तेमाल करते समय हमेशा लंगर लगाइए।
- गोल कोष्ठक ( ) अपने भीतर की चीज़ पकड़ लेते हैं। सिर्फ़ समूह चाहिए तो (?: ) लिखिए, वरना आगे की संख्या खिसक जाती है।
- यहाँ के हर एक्सप्रेशन को उसके उदाहरणों से जाँचा जाता है। फिर भी "ईमेल जैसा दिखता है" और "सचमुच का पता है" अलग बातें हैं।
- (a+)+ जैसी खुली-अंत दोहराव वाली नेस्टिंग कुछ इनपुट पर समय को फोड़ सकती है। किसी और का एक्सप्रेशन चिपकाने से पहले यह आकार देख लीजिए।
अक्सर पूछे जाने वाले सवाल
Q. रेगुलर एक्सप्रेशन क्या है?
पाठ में जो आकृति खोजनी है उसे लिखने की एक छोटी भाषा। "चार अंक" के बजाय \d{4} लिखिए और प्रोग्राम हर वैसी जगह ढूँढ़ देगा। JavaScript, Python, Java समेत ज़्यादातर भाषाएँ लगभग यही संकेतन इस्तेमाल करती हैं।
Q. ईमेल की जाँच इतनी छोटी क्यों है?
पूरे मानक को समेटने वाला पैटर्न हज़ारों वर्ण लंबा होता है और फिर भी नहीं बताता कि पता सचमुच है या नहीं। टाइपिंग की ग़लती पकड़ना ही रेगेक्स कर सकता है; असली जाँच पुष्टि-मेल भेजना है।
Q. भाषा-भाषा में पैटर्न अलग क्यों होते हैं?
आधार एक है, ब्योरे अलग। JavaScript में \A नहीं है और Python में re.MULTILINE अलग से चालू करना पड़ता है। यहाँ के सभी पैटर्न JavaScript में जस के तस चलने के लिए लिखे गए हैं।
Q. पैटर्न धीमा हो सकता है, इसका क्या मतलब?
(a+)+ जैसी खुली-अंत दोहराव नेस्ट हो जाए तो न मिलने वाले इनपुट पर पीछे लौटने के रास्ते फट पड़ते हैं। तब छोटी स्ट्रिंग भी कई सेकंड ले सकती है, जो सर्वर पर ख़तरनाक है।
Q. क्या इन पैटर्नों पर भरोसा किया जा सकता है?
हर पैटर्न के साथ मिलने वाले और न मिलने वाले उदाहरण दर्ज हैं, और जाँच सभी 133 को सचमुच चलाती है। पन्ने पर दिखने वाले उदाहरण वही हैं जो जाँच इस्तेमाल करती है, इसलिए विवरण और पैटर्न अलग नहीं हो सकते।