2011-07-15 18 views
5

Regex kullanarak tam eşleşme için sınama hakkında nasıl giderim?Ruby'de tam bir desen eşleşmesi bulmak için düzenli ifadeyi kullanma

"car".match(/[ca]+/), doğru döndürür.

Normal ifadenin "r" içermediği için yukarıdaki ifadeyi yanlış durumuna nasıl döndürürüm? "C" ve "a" dışındaki herhangi bir karakter içeren herhangi bir dize yanlış döndürmelidir.

"acacaccc" gerçek

"acacacxcc" dönmelidir sahte

cevap

9

kendisine bazı çapa ekle dönmelidir:

/^[ca]+$/ 
+2

No: '" c \ n X Örneğin

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

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

+0

Bu çapa yanlış. Lütfen Chris Heald'ın cevabına bakın. – skalee

6

Sadece çapa gerekiyor.

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

Bu "c" ya da "a" oluşacak şekilde tüm dizeyi zorlarsınız, dizenin "^" ve "$" demek "start" ve "uç" beri. Bunlar olmadan, regex dizenin herhangi bir kısmı ile eşleştiği sürece başarılı olur.

+2

Bu, "caca \ nrabbits" gibi dizeleri bozar. Uygun ankrajlar \ \ '\' \ Z' – cam

+4

@cam olacaktır: Aslında '\ z' değil,' \ Z' istemiyorsanız ya da 'c \ n '' diyeceksin. –

+0

@mu çok kısa: iyi nokta, teşekkürler. – cam

0

bu

"car".match /^(a|c)+$/ 
3

etrafında mantığı çevirin ve kötü şeyler aramak deneyin:

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

yukarıdakilerden herhangi biri olmayan nil ise, o zaman kötü bir dize var. Sadece test etmek istiyorum ve daha sonra aynı olduğu umurumda değil ise:

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

bu deneyin:

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