2011-07-15 7 views
5

में एक सटीक पैटर्न मिलान खोजने के लिए रेगेक्स का उपयोग करना मैं regex का उपयोग कर सटीक मिलान के लिए परीक्षण के बारे में कैसे जाउंगा।रूबी

"car".match(/[ca]+/) सत्य लौटाता है।

रेगेक्स पैटर्न में "आर" नहीं होने के बाद से उपरोक्त कथन को झूठी वापसी के लिए कैसे प्राप्त किया जाएगा? कोई भी स्ट्रिंग जिसमें "सी" और "ए" के अलावा किसी भी वर्ण शामिल हैं, को झूठी वापसी करनी चाहिए।

"acacaccc" सच

"acacacxcc" लौटना चाहिए लौटना चाहिए झूठी

उत्तर

9

इसे करने के लिए कुछ एंकर जोड़ें:

/^[ca]+$/ 
+2

नहीं: '" ग \ nX ".match (/^[ca] + $ /)'। –

+0

यह एंकर गलत हैं। क्रिस हेल्ड के जवाब पर टिप्पणियां देखें। – skalee

6

तुम बस एंकर की जरूरत है।

"car".match(/^[ca]+$/) 

यह "सी" या "एक" से रचित पूरी स्ट्रिंग के लिए मजबूर कर देंगे, "^" और "$" मतलब "शुरू" और स्ट्रिंग के "अंत" के बाद से। उनके बिना, regex तब तक सफल रहेगा जब तक यह स्ट्रिंग के किसी हिस्से से मेल खाता हो।

+2

यह "caca \ nrabbits" जैसे तारों पर टूटता है। उचित एंकर '\ A' और '\ Z' – cam

+4

@cam: असल में आप' \ z', '\ Z' नहीं चाहते हैं, या आप' "\ n" 'याद करेंगे। –

+0

@mu बहुत छोटा है: अच्छा बिंदु, धन्यवाद। – cam

3

चारों ओर अपने तर्क मुड़ें और बुरी चीजें देखने के लिए:

string.match(/[^ca]/) 
string.index(/[^ca]/) 

ऊपर की या तो गैर शून्य हैं, तो आप एक बुरा स्ट्रिंग है। तुम सिर्फ परीक्षण करना चाहते हैं और जहां यह तो मेल खाता है के बारे में परवाह नहीं करते हैं:

if string.index(/[^ca]/).nil? 
    # You have a good string 
else 
    # You have a bad string 

उदाहरण के लिए:

>> "car".index(/[^ca]/).nil? 
=> false 
>> "caaaacaac".index(/[^ca]/).nil? 
=> true 
1

इस प्रयास करें:

"car".match(/^(?:c|a)$/)