क्रॉस-मिलान नियमित अभिव्यक्ति


21

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

दोनों नियमित अभिव्यक्तियों में यह रूप होना चाहिए:

/pattern/optional-flags

यह वह रूप भी है जिसमें उनका मिलान किया जाना चाहिए।

सबसे छोटा समाधान जीतता है। समाधान की लंबाई को स्लैश और झंडे सहित दोनों नियमित अभिव्यक्तियों में पात्रों के योग के रूप में गिना जाता है।

अपनी पसंद के एक रेगेक्स सिंटैक्स मानक का उपयोग करें, या एक प्रोग्रामिंग भाषा निर्दिष्ट करें, जब यह एक अंतर बनाता है।

मज़े करो!


क्या रेगेक्स को भी अन्य रेगेक्स के स्लैश और झंडे से मेल खाना है?
प्रोग्रामफॉक्स

@ProgramFOX हाँ, मैंने इसे स्पष्ट करने के लिए एक पंक्ति जोड़ी।
गोटो 0

क्या आप मैच को परिभाषित कर सकते हैं? रेगेक्स /a/मैच करता है abc?
द गाईट विथ द हैट

2
@ TheGuywithTheHat अच्छी तरह से, मुझे ऐसा लगता है, जब तक कि आप एक भाषा का चयन नहीं करते हैं जो कुछ प्रतिबंधों को लगाता है, जैसे कि पूरे स्ट्रिंग को मिलाने की आवश्यकता। क्या यह आपकी चिंता को संबोधित करता है?
गोटो 0

1
स्पष्ट होने के लिए: मेरा मानना ​​है कि विभिन्न सीमांकक (जैसे कि PHP PCRE द्वारा अनुमत) के उपयोग की अनुमति नहीं है? (यानी कोई जमा नहीं ) /^%/और%^/%
पीटर टेलर

जवाबों:


7

A संशोधक के साथ PRCE: 9 वर्ण

/A$/
/.A/A

हालाँकि यह Doorknob के /modifier$/उत्तर पर एक प्रकार है , मुझे लगता है कि यह नवाचार इसे एक अलग जवाब के रूप में अर्हता प्राप्त करता है न कि उसकी टिप्पणी पर: संशोधक दोहरा कर्तव्य करता है। मैच के लिए अन्य रेगेक्स के लिए पूरी तरह से होने के बजाय, यह लंगर करता है।

पहला रेगेक्स शाब्दिक में समाप्त होने वाले किसी भी स्ट्रिंग से मेल खाता है A। दूसरा रेगेक्स किसी भी स्ट्रिंग से मेल खाता है जिसका दूसरा चरित्र एक शाब्दिक है A, एक एंकर-टू-स्टार्ट फ्लैग का उपयोग करता है।

ऑनलाइन डेमो


3
इसे हराने के लिए केवल चार गैर-सीमांकक वर्णों की आवश्यकता होती है, और चूंकि //कुछ भी मेल खाता है इसका मतलब है कि प्रत्येक रेगीक्स में अधिकतम तीन गैर-सीमांकक चार्ट हो सकते हैं। PHP PCRE का उपयोग करने से उस बाधा के भीतर 73339 नॉन-सेल्फ-मैचिंग रेगेक्स होते हैं, और उन जोड़ो की संपूर्ण जाँच होती है जिनकी लंबाई 10 से कम है (5.7Gpairs के बजाय 32M जोड़े के आदेश पर क्योंकि उनमें से अधिकांश 5 सीम में शामिल हैं) यह समाधान और कोई नहीं। इसलिए मेरा दावा है कि यह उस विशेष रेगेक्स इंजन के लिए इष्टतम है।
पीटर टेलर

18

4 + 6 = 10 का स्कोर

पहला रेगेक्स:

/i$/

दूसरा रेगेक्स:

/^.i/i

ध्वज के दुरुपयोग के लिए हुर्रे! :-P

पहले एक कुछ के साथ मेल खाता है i(इसलिए, iध्वज के साथ कोई भी रेक्स )।

दूसरा एक के दूसरे चरित्र के साथ कुछ भी मेल खाता है i

वैकल्पिक संस्करण: /i$/gऔर /g$/i


3
एक और भिन्नता होगा /x.$/और /^.x/के एक्स एक गुच्छा के लिए
shiona

या /i$/और/\/$/i
पीटर टेलर

या /i$/और/i\$/i
पीटर टेलर

6

जावास्क्रिप्ट regexes, स्कोर: 18

पहला रेगेक्स:

/^[^a]+$/

दूसरा रेगेक्स:

/^[^b]+$/

जावास्क्रिप्ट परीक्षण:

var regex1 = "/^[^a]+$/";
var regex2 = "/^[^b]+$/";
alert(/^[^a]+$/.test(regex2)); // true: regex1 matches regex2
alert(/^[^b]+$/.test(regex1)); // true: regex2 matches regex1
alert(/^[^a]+$/.test(regex1)); // false: regex1 doesn't match regex1
alert(/^[^b]+$/.test(regex2)); // false: regex2 doesn't match regex2

ऑनलाइन टेस्ट करें: http://jsfiddle.net/99Sx6/



5

4 + 6 = 10

पहला रेगेक्स:

/i$/

दूसरा रेगेक्स:

/\/$/i

i$कुछ के साथ समाप्त होता है i, दूसरे से मेल खाता है । /$किसी ऐसी चीज़ से मेल खाता है /, जो पहले वाली है।


2
Doorknob के उत्तर पर मैंने एक टिप्पणी का डुप्लीकेट पोस्ट किया।
पीटर टेलर

@PeterTaylor अब तक टिप्पणियों पर ध्यान नहीं दिया। ये स्वतंत्र खोज थे।
जस्टिन

हाँ, मैंने स्वतंत्र रूप से शियोना के संस्करण की भी खोज की।
पीटर टेलर

3

५ + ५ = १०

रेगेक्स # 1:

/0.$/

रेगेक्स # 2:

/^.0/

0दोनों regexes में किसी भी गैर metacharacter साथ बदला जा सकता है और regex अभी भी काम करता है।

0.$कुछ भी जिसका दूसरा अंतिम वर्ण है से मेल खाता है 0, और ^.0मैचों कुछ भी जिसका दूसरा चरित्र है 0


2
पहली जोड़ी मान्य रेगीक्स नहीं है: आपको /तों बचने की जरूरत है । विकल्प डोर्कनब के उत्तर पर एक टिप्पणी का एक आधार है।
पीटर टेलर

2

जावास्क्रिप्ट regexes, स्कोर: 13

पहला रेगेक्स:

/\d/

दूसरा रेगेक्स:

/^[^0]+$/

स्पष्टीकरण: पहला रेगेक्स सब कुछ से मेल खाता है जिसमें एक अंक होता है, और दूसरा रेगेक्स सब कुछ से मेल खाता है जिसमें ए नहीं है 0

जावास्क्रिप्ट परीक्षण:

var regex1 = "/\d/";
var regex2 = "/^[^0]+$/";
alert(/\d/.test(regex2)); // true: regex1 matches regex2
alert(/^[^0]+$/.test(regex1)); // true: regex2 matches regex1
alert(/\d/.test(regex1)); // false: regex1 doesn't match regex1
alert(/^[^0]+$/.test(regex2)); // false: regex2 doesn't math regex2

ऑनलाइन टेस्ट करें: http://jsfiddle.net/5VYjC/1/



2

स्कोर: 5 + 5 = 10

मुझे जानने के लिए आधे घंटे का समय लगा, लेकिन मैं वास्तव में खुश हूं कि मैंने किया :)

पहला है: /j.$/

दूसरा है: /^.j/

पहली बार jदाईं ओर से शुरू होने वाली दूसरी स्थिति में मिलान हुआ । दूसरा मैच jबायीं ओर से शुरू होने वाले दूसरे स्थान पर होता है।

मैंने परीक्षण नहीं किया है लेकिन मुझे लगता है कि ये RegEx वास्तव में बहुमुखी हैं क्योंकि jइन्हें किसी भी \wवर्ण (या अधिक?) से बदला जा सकता है और फिर भी यह ठीक काम कर सकता है।

PS यह किसी भी भाषा में (उम्मीद) काम करना चाहिए। हालांकि, अगर यह किसी भी काम नहीं करता है, तो कृपया नीचे टिप्पणी में सूचित करें :)

परीक्षा


और मुझे अब पता चला है कि @Quiccunx ने पहले ही संस्करण को मेरा के रूप में पोस्ट किया है। मुझे वास्तव में खेद है कि क्विक्कुनक्स और अगर यह किसी को भी खुश करेगा, तो मैं अपना उत्तर हटा दूंगा।
गौरांग टंडन

1

संशोधक x: 11 वर्णों का उपयोग करते हुए पीसीआरई

/\s/
/ s.$/x

पहला व्हाट्सएप कैरेक्टर के साथ किसी भी स्ट्रिंग से मेल खाता है, लेकिन इसमें व्हॉट्सएप नहीं है। दूसरे में व्हॉट्सएप शामिल है, लेकिन इसे xसंशोधक के कारण अनदेखा किया गया है ; यह किसी भी स्ट्रिंग से मेल खाता है, जिसका दंडात्मक चरित्र है s

पीसीआर और अन्य इंजन वर्ण वर्गों का उपयोग करते हैं: 11 वर्ण

/\w+w/
/\Ww/

पहला शब्द "शब्द" अक्षर (अक्षर, अंक, अंडरस्कोर) के साथ किसी भी स्ट्रिंग से मेल खाता है और उसके बाद एक शाब्दिक w; दूसरा गैर-शब्द चरित्र के साथ किसी भी स्ट्रिंग से मेल खाता है और उसके बाद एक शाब्दिक w

पीसीआर और अन्य इंजन चरित्र वर्गों और शब्द सीमा लंगर का उपयोग करते हैं: 11 वर्ण

/\w\w/
/\bw/

पहले दो लगातार "शब्द" वर्णों के साथ किसी भी स्ट्रिंग से मेल खाता है; एक गैर-शब्द चरित्र या स्ट्रिंग की शुरुआत के साथ किसी भी स्ट्रिंग के बाद दूसरा शाब्दिक w


-1

ECMAScript (11 बाइट्स):

/^\1?d/
/\d/

अन्य REGEXP इंजन (14 बाइट्स):

/^\\\\1?d/
/\d/

1 मैच \ d [..] या \ 1d [..]।

दूसरा किसी संख्या के साथ किसी स्ट्रिंग से मेल खाता है।

संपादित करें:

मूल रूप से, यह उत्तर सभी इंजनों के साथ संगत होने के रूप में पोस्ट किया गया था, लेकिन यह गलत साबित हुआ था।

कैप्चरिंग समूहों के संदर्भ में एक समस्या थी (उदाहरण के लिए, php में)।


कई रेगेक्स इंजन रेगेक्स को आसपास के स्लैश के बिना लेते हैं, लेकिन उन्हें गिनने की आवश्यकता में सवाल काफी स्पष्ट है।
पीटर टेलर

मैं इसे एक जवाब के रूप में नहीं गिन रहा हूं। मुझे उसके लिए नोट जोड़ना है।
इस्माइल मिगुएल

1
@PeterTaylor मैंने नोट जोड़ा। अपाचे संस्करण सिर्फ इसलिए है।
इस्माइल मिगुएल

हैंग करें: \1बैक-रेफरेंस के रूप में व्याख्या नहीं किए जाने वाले पहले एक पार्स क्या इंजन में है ?
पीटर टेलर

जिस तरह से आप इसका इस्तेमाल करते हैं उसके आधार पर। उदाहरण के लिए, यदि आप अंदर डालते हैं, तो आपको "/^\1?d/"परेशानी होगी, लेकिन यदि आप करते हैं '/^\1?d/', तो यह ठीक है। जब कोड की व्याख्या की जाती है तो उद्धरण बहुत बड़ा अंतर रखते हैं।
इस्माईल मिगुएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.