एक स्ट्रिंग के सटीक मिलान के लिए नियमित अभिव्यक्ति


153

मैं नियमित अभिव्यक्ति के साथ दो पासवर्ड का मिलान करना चाहता हूं। उदाहरण के लिए मेरे पास दो इनपुट "123456" और "1234567" हैं तो परिणाम मैच (गलत) नहीं होना चाहिए। और जब मैंने "123456" और "123456" दर्ज किया है, तो परिणाम मैच (सच) होना चाहिए।

मैं अभिव्यक्ति नहीं कर सका। मैं यह कैसे करुं?


9
आप इस मामले में रेगेक्स क्यों चाहते हैं? (सटीक) समानता की जाँच वास्तव में रेगेक्स के बिना की जानी चाहिए।
बार्ट कीर्स

क्योंकि हम देखते हैं कि बैश स्क्रिप्ट में टेक्स्ट को कैसे बदला जाए और एक जवाब मिलता है जिसमें पर्ल और रेगेक्स शामिल हैं।
सूदो

एक ही मुद्दा एक बेहतर समाधान होने ^ (123456) आप चाहते हैं कि परिणाम दे देंगे
sdx11

के संभावित डुप्लिकेट मैच पूरी स्ट्रिंग
ओमर

@canbax यह बिल्कुल एक अजीब सवाल क्यों होगा?
मिलान वेलेबिट

जवाबों:


177

यदि आपके पास एक चर में एक इनपुट पासवर्ड है और आप 123456 से मेल खाना चाहते हैं तो एंकर आपकी मदद करेंगे:

/^123456$/

पासवर्ड मिलान के लिए परीक्षण में पर्ल कुछ इस तरह होगा

print "MATCH_OK" if ($input_pass=~/^123456$/);

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

bart kiers सही tho है, तो आप इसके लिए एक strcmp () का उपयोग क्यों नहीं करते हैं? हर भाषा अपने तरीके से होती है

एक दूसरे विचार के रूप में, आप एक सुरक्षित प्रमाणीकरण तंत्र पर विचार करना चाह सकते हैं :)


एंकर के लिए धन्यवाद, मुझे पता था कि लेकिन पूरी तरह से इसके बारे में नहीं सोचा था :)
vikingsteve

2
महत्वपूर्ण : पर्ल और पीसीआरई में, आप \zइसके बजाय चाहते हैं $/^123456$/दोनों मैच 123456और 123456उसके बाद एक लाइन फ़ीड, जबकि /^123456\z/केवल मैच 123456
इकेगामी

154

पाठ के आरंभ और अंत का पता लगाने के लिए malfaux के उत्तर '^' और '$' का उपयोग किया गया है।
ये आमतौर पर एक पंक्ति की शुरुआत और अंत का पता लगाने के लिए उपयोग किया जाता है।
हालाँकि यह इस मामले में सही तरीका हो सकता है।
लेकिन अगर आप एक सटीक शब्द का मिलान करना चाहते हैं तो 'एल' का उपयोग करने का तरीका अधिक सुंदर है । इस मामले में निम्न पैटर्न सटीक वाक्यांश'123456 'से मेल खाएगा।

/ \ B123456 \ बी /


क्या आप सुनिश्चित हैं कि यह उस तरह से काम करता है? ;) इस तरह एक regex परीक्षक का उपयोग करें । "शो मैच" बटन का उपयोग करें और आप देखेंगे कि यह क्यों मेल खाता है। BTW याद है। '' यह बचने के लिए एक विशेष आकर्षण और अच्छा है। (और मतदान से पहले दो बार सोचने के लिए अच्छा है: डी)।
प्रेगेथ

2
यदि आपको लगता है कि मेरा उत्तर भ्रामक या गलत है, तो आप अभी भी अपना उत्तर (जैसा कि अन्य लोग करते हैं) पोस्ट कर सकते हैं या मेरे सुझाव के तहत एक टिप्पणी रख सकते हैं, जिसमें आपका सुझाव होगा।
प्रागीठ

26
आपका जवाब भ्रामक है और इससे कई लोगों को गंभीर समस्या होगी। उदाहरण के लिए, आपके दृष्टिकोण \ bhttp: //www.foo.com \ b का उपयोग करके http://www.bar.com/?http://www.foo.com से मिलान होगा , जो निश्चित रूप से एक सटीक मैच नहीं है, जैसा कि ओपी में अनुरोध किया। यह URL या पासवर्ड के साथ काम करने वाले लोगों के लिए गंभीर समस्याएं पैदा करेगा (जो, फिर से, ओपी ने अनुरोध किया है) जिसमें गैर-शब्द अक्षर हैं। आपको अपना जवाब स्पष्ट करना चाहिए ताकि अन्य लोग भटक न जाएं।
0x1mason

2
तुम्हें समझाना पड़ेगा। '।' एक लाल हेरिंग है। \ bhttp: // www \ .foo \ .com \ b अभी भी http://www.bar.com/?http://www.foo.com के लिए एक मैच का निर्माण करता है । ओपी चाहती ही नहीं है।
0x1mason

1
@ 0x1mason सही है जो URL के साथ \bhttp:\/\/www.foo.com\bमेल करेगा http://www.foo.com=?http://www.foo.com। पहली प्रतिक्रिया, ^(शुरुआत) और $(अंत) का उपयोग इन परीक्षकों के माध्यम से सबसे अच्छी विधि है: regex101.com और regexr.com (नीचे दिए गए लिंक में शामिल परीक्षक बहुत उपयोगकर्ता के अनुकूल नहीं है, ये बहुत बेहतर हैं)
twknax

34
(?<![\w\d])abc(?![\w\d])

यह सुनिश्चित करता है कि आपका मैच किसी वर्ण, संख्या, या अंडरस्कोर से पहले नहीं है और इसके तुरंत बाद चरित्र या संख्या या अंडरस्कोर नहीं है

इसलिए यह "एबीसी", "एबीसी", "एबीसी", "एबीसी" में मेल खाएगा, लेकिन "4 एबीसी" नहीं, और न ही "एबीसी"


1
प्रश्न का शीर्षक भ्रामक है; वह यह सुनिश्चित करने की कोशिश कर रहा है कि दो पूरे तार बिल्कुल समान हैं। इसके अलावा, \wअंकों के साथ-साथ अक्षरों से भी मेल खाता है, इसलिए [\w\d]बेमानी है।
एलन मूर

अच्छा। "fiddle" के लिए regextester.com/?fam=113232 देखें, मैंने इसे आज़माने के लिए किया था
unsynchronized

पैटर्न के आसपास () ने मेरी मदद की।
ग़ज़ल

6

समानता के लिए जाँच करने का एक और अधिक सीधा तरीका है

if string1 == string2
  puts "match"
else
  puts "not match"
end

हालाँकि, यदि आप वास्तव में नियमित अभिव्यक्ति से चिपके रहना चाहते हैं,

string1 =~ /^123456$/

@ कुरुमी मैं जावा कोड बनाने की कोशिश कर रहा हूं जो txt फ़ाइल में विशिष्ट शब्द खोजता है और मैं regx का उपयोग करना चाहता हूं ताकि मैं उस पैटर्न का उपयोग कर सकूं / ^ myword $ / with String.match (/ ^ myword $ /) खोज करने के लिए उस txt में शब्द?
एंटवान

3

आप कीवर्ड के आरंभ और अंत में एक स्थान जोड़ने की कोशिश कर सकते हैं /\s+123456\s+/i:।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.