पीसीआरई फ्लेवर, 261 289 210 184 127 109 71 53 51 44 40 बाइट्स
हाँ यह संभव है!
<^<()(?R){2}>\z|\1\Q^<()(?R){2}>\z|\1\Q>
इसे यहाँ आज़माएँ। (लेकिन /
Regex101 पर परिसीमन दिखाया गया है।)
कृपया Regex101 पृष्ठ पर अनावश्यक संपादन (अपडेट) करने से बचें। यदि आपका संपादन वास्तव में इस रेगेक्स में सुधार, प्रयास या परीक्षण शामिल नहीं करता है, तो आप इसे कांटा कर सकते हैं या अपने मुखपृष्ठ से नए बना सकते हैं ।
संस्करण Regex101 (44 बाइट्स) पर अधिक सही ढंग से काम करता है:
/^\/()(?R){2}\/\z|\1\Q^\/()(?R){2}\/\z|\1\Q/
इसे यहाँ आज़माएँ।
यह मूल संस्करण की तुलना में बहुत सरल है और पारंपरिक क्वीन की तरह अधिक काम करता है। यह बिना स्ट्रिंग का उपयोग किए इसे परिभाषित करने की कोशिश करता है, और इसे एक अलग जगह पर उपयोग करता है। इसलिए इसे रेगेक्स के एक छोर के बहुत करीब रखा जा सकता है, जिससे मिलान पैटर्न को परिभाषित करने के लिए अधिक वर्णों की आवश्यकता वाले पात्रों की संख्या कम हो और अधिक बार दोहराया जाए।
स्पष्टीकरण:
\Q^\/()(?R){2}\/\z|\1\Q
स्ट्रिंग से मेल खाता है ^\/()(?R){2}\/\z|\1\Q
। यह एक क्विक का उपयोग \Q...\E
करता है जिसे बंद नहीं करना पड़ता है, और अनसैप्ड डेलिमिटर काम करते हैं \Q
। इसने पिछले कुछ संस्करणों को केवल Regex101 पर काम किया और स्थानीय रूप से नहीं। लेकिन सौभाग्य से नवीनतम संस्करण ने काम किया, और मैंने इसका उपयोग करके कुछ और बाइट्स को बंद कर दिया।
\1
\Q
कैप्चर किए गए समूह के मैचों से पहले 1. क्योंकि समूह 1 इस विकल्प में मौजूद नहीं है, यह केवल पुनरावर्ती कॉल में मेल कर सकता है। पुनरावर्ती कॉल में यह खाली तारों से मेल खाता है।
(?R){2}
पूरे रेगेक्स को दो बार पुनरावर्ती कहता है, जो ^\/()(?R){2}\/\z|\1\Q
हर बार मेल खाता है ।
()
समूह 1 में एक खाली स्ट्रिंग पर कब्जा करने के अलावा कुछ नहीं करता है, जो पुनरावर्ती कॉल में अन्य विकल्प को सक्षम करता है।
^\/()(?R){2}\/\z
(?R){2}
शुरू से अंत तक, सीमांकित के साथ मेल खाता है । \/
इससे पहले कि पुनरावर्ती कॉल भी यकीन है कि इस विकल्प को ही पुनरावर्ती कॉल में से मेल नहीं खाता है, क्योंकि यह स्ट्रिंग की शुरुआत में नहीं होगा बनाया है।
बंद के साथ 51 बाइट्स \Q...\E
:
/\QE\1|^\/(\\)Q(?R){2}z\/\E\1|^\/(\\)Q(?R){2}z\/\z/
इसे यहाँ आज़माएँ।
मूल संस्करण, 188 बाइट्स
लगभग 100 बाइट को बंद करने के लिए मार्टिन ब्यूटनर को धन्यवाद!
/^(?=.{173}\Q\2\)){2}.{11}$\E\/\z)((?=(.2.|))\2\/\2\^\2\(\2\?=\2\.\2\{173}\2\\Q\2\\2\2\\\2\)\2\)\2\{2}\2\.\2\{11}\2\$\2\\E\2\\\2\/\2\\z\2\)\2\(\2\(\2\?=\2\(\2\.2\2\.\2\|\2\)\2\)){2}.{11}$/
इसे यहाँ आज़माएँ।
या बिना 210 बाइट्स \Q...\E
:
/^(?=.{194}\\2\\.\)\{2}\.\{12}\$\/D$)((?=(.2.|))\2\/\2\^\2\(\2\?=\2\.\2\{194}\2\\\2\\2\2\\\2\\\2\.\2\\\2\)\2\\\2\{2}\2\\\2\.\2\\\2\{12}\2\\\2\$\2\\\2\/D\2\$\2\)\2\(\2\(\2\?=\2\(\2\.2\2\.\2\|\2\)\2\)){2}.{12}$/D
इसे यहाँ आज़माएँ।
विस्तारित संस्करण:
/^(?=.{173}\Q\2\)){2}.{11}$\E\/\z) # Match things near the end.
((?=(.2.|)) # Capture an empty string or \2\ into group 2.
\2\/\2\^\2\(\2\?=\2\.\2\{173}\2\\Q\2\\2\2\\\2\)\2\)\2\{2}\2\.
\2\{11}\2\$\2\\E\2\\\2\/\2\\z\2\) # 1st line escaped.
\2\(\2\(\2\?=\2\(\2\.2\2\.\2\|\2\)\2\) # 2nd line escaped.
){2}
.{11}$/x
एक्सटेंशन्स जैसे (?=
और \1
तथाकथित "रेगुलर" एक्सप्रेशन को अब रेगुलर नहीं बनाते हैं, जिससे क्वीन भी संभव हो जाता है। बैकरेज नियमित नहीं है, लेकिन लुकहेड है।
स्पष्टीकरण:
- मैं विशेष पात्रों से बचने
\2\
के \
लिए जगह में उपयोग करता हूं । यदि \2
रिक्त स्ट्रिंग से मेल खाता है, \2\x
(जहां x
एक विशेष चरित्र है) x
स्वयं से मेल खाता है। अगर \2
मैच होते हैं \2\
, तो \2\x
मैच बच जाता है। \2
ग्रुप 1 के दो मैचों में रेगेक्स में अलग हो सकता है। पहली बार \2
में खाली स्ट्रिंग, और दूसरी बार मेल खाना चाहिए \2\
।
\Q\2\)){2}.{11}$\E\/\z
(लाइन 1) अंत से 15 वर्णों से मेल खाता है। और .{11}$
(पंक्ति 7) अंत से 11 पात्रों (या एक अनुगामी न्यूलाइन से पहले) से मेल खाती है। तो दूसरे पैटर्न से ठीक पहले वाला पैटर्न पहले पैटर्न में पहले 4 या 3 अक्षरों से \2\.\2\|\2\)\2\)
मेल खाना चाहिए , इसलिए मैच होना चाहिए ...\2\)
या ...\2\
। कोई अनुवर्ती नई रेखा नहीं हो सकती क्योंकि अंतिम वर्ण होना चाहिए )
। और मिलान किए गए पाठ )
में सबसे सही एक से पहले दूसरा नहीं है , इसलिए अन्य सभी वर्णों में होना चाहिए \2
। \2
के रूप में परिभाषित किया गया है (.2.|)
, इसलिए यह केवल हो सकता है \2\
।
- पहली पंक्ति पूरी अभिव्यक्ति को 188 वर्णों से मेल खाती है क्योंकि हर चीज की एक निश्चित लंबाई होती है। समूह 1 के दो समय 45 * 2 अक्षर और 29 बार मेल खाते हैं
\2
। और समूह 1 के बाद की चीजें 11 वर्णों से मेल खाती हैं। तो दो बार की कुल लंबाई \2
बिल्कुल 3 अक्षर होनी चाहिए। \2
दूसरी बार जानना 3 वर्ण लंबा है, यह पहली बार खाली होना चाहिए।
- लुकहेड को छोड़कर सब कुछ
\2
समूह 1 में शाब्दिक है। दो बार \2
ज्ञात होने के साथ, और पहली पंक्ति से ज्ञात अंतिम कुछ अक्षर, यह रेग्ज बिल्कुल एक तार से मेल खाता है।
- मार्टिन ब्युटनर समूह 2 पर कब्जा करने और इसे क्वीन भाग के साथ ओवरलैप बनाने के लिए लुकहेड का उपयोग करने के विचार के साथ आता है। इससे समूह 1 के दो बार के बीच सामान्य तरीके से बच गए वर्णों को हटा दिया गया, और उन्हें मेरे मूल संस्करण में मिलान करने के पैटर्न से बचने में मदद की, और रेगेक्स को बहुत सरल किया।
पुनरावृत्ति या पीछे हटने के बिना रेगेक्स, 85 बाइट्स
कोई यह तर्क दे सकता है कि पुनरावृत्ति या पश्चप्रदर्शन वाले भाव वास्तविक "नियमित" भाव नहीं हैं। लेकिन केवल लुकहैड के साथ अभिव्यक्तियाँ अभी भी केवल नियमित भाषाओं से मेल खा सकती हैं, हालांकि पारंपरिक नियमित अभिव्यक्तियों द्वारा व्यक्त किए जाने पर वे बहुत लंबे समय तक हो सकते हैं।
/(?=.*(\QE\\){2}z\/\z)^\/\(\?\=\.\*\(\\Q.{76}\E\\){2}z\/\z)^\/\(\?\=\.\*\(\\Q.{76}\z/
इसे यहाँ आज़माएँ।
610 बाइट्स बिना \Q...\E
(गोल्फ होने के लिए):
/^(?=.{610}$)(?=.{71}(\(\.\{8\}\)\?\\.[^(]*){57}\)\{2\}\.\{12\}\$\/D$)((.{8})?\/(.{8})?\^(.{8})?\((.{8})?\?=(.{8})?\.(.{8})?\{610(.{8})?\}(.{8})?\$(.{8})?\)(.{8})?\((.{8})?\?=(.{8})?\.(.{8})?\{71(.{8})?\}(.{8})?\((.{8})?\\(.{8})?\((.{8})?\\(.{8})?\.(.{8})?\\(.{8})?\{8(.{8})?\\(.{8})?\}(.{8})?\\(.{8})?\)(.{8})?\\(.{8})?\?(.{8})?\\(.{8})?\\(.{8})?\.(.{8})?\[(.{8})?\^(.{8})?\((.{8})?\](.{8})?\*(.{8})?\)(.{8})?\{57(.{8})?\}(.{8})?\\(.{8})?\)(.{8})?\\(.{8})?\{2(.{8})?\\(.{8})?\}(.{8})?\\(.{8})?\.(.{8})?\\(.{8})?\{12(.{8})?\\(.{8})?\}(.{8})?\\(.{8})?\$(.{8})?\\(.{8})?\/D(.{8})?\$(.{8})?\)(.{8})?\(){2}.{12}$/D
इसे यहाँ आज़माएँ।
विचार समान है।
/^(?=.{610}$)(?=.{71}(\(\.\{8\}\)\?\\.[^(]*){57}\)\{2\}\.\{12\}\$\/D$)
((.{8})?\/(.{8})?\^(.{8})?\((.{8})?\?=(.{8})?\.(.{8})?\{610(.{8})?\}(.{8})?\$(.{8})?\)
(.{8})?\((.{8})?\?=(.{8})?\.(.{8})?\{71(.{8})?\}
(.{8})?\((.{8})?\\(.{8})?\((.{8})?\\(.{8})?\.(.{8})?\\(.{8})?\{8(.{8})?\\(.{8})?\}
(.{8})?\\(.{8})?\)(.{8})?\\(.{8})?\?(.{8})?\\(.{8})?\\
(.{8})?\.(.{8})?\[(.{8})?\^(.{8})?\((.{8})?\](.{8})?\*(.{8})?\)(.{8})?\{57(.{8})?\}
(.{8})?\\(.{8})?\)(.{8})?\\(.{8})?\{2(.{8})?\\(.{8})?\}
(.{8})?\\(.{8})?\.(.{8})?\\(.{8})?\{12(.{8})?\\(.{8})?\}
(.{8})?\\(.{8})?\$(.{8})?\\(.{8})?\/D(.{8})?\$(.{8})?\)(.{8})?\(){2}.{12}$/D
मूल नियमित अभिव्यक्ति
अगर लुकहेड की अनुमति नहीं है, तो अब मैं सबसे अच्छा कर सकता हूं:
/\\(\\\(\\\\){2}/
जो मेल खाता है
\\(\\\(\\
यदि {m,n}
क्वांटिफायर की अनुमति नहीं है, तो यह असंभव है क्योंकि कुछ भी नहीं जो केवल एक स्ट्रिंग से मेल खा सकता है, एक स्ट्रिंग से अधिक लंबे समय तक मिलान कर सकता है। बेशक कोई अभी भी कुछ ऐसा आविष्कार कर सकता है \q
जो केवल मेल खाता है /\q/
, और अभी भी उस नियमित के साथ भाव कहता है। लेकिन स्पष्ट रूप से ऐसा कुछ भी प्रमुख कार्यान्वयन द्वारा समर्थित नहीं है।