2010-02-10 22 views
43

Làm cách nào để chuỗi ký tự chống lại regex sao cho chuỗi đó sẽ trả về true nếu các đối sánh chuỗi toàn bộ (không phải là chuỗi con)?Làm cách nào để kiểm tra chuỗi WHOLE đối với regex trong ruby?

ví dụ:

test(\ee\ , "street") #=> returns false 
test(\ee\ , "ee") #=> returns true! 

Cảm ơn bạn.

+21

tặng một người đàn ông so sánh chuỗi và anh ấy sẽ thành sự thật, cung cấp cho một người đàn ông một regex và anh ta sẽ mất tất cả khả năng lý do và tìm kiếm trên internet. – Lazarus

+0

@doctororange, liệu bạn có chấp nhận Tomas Markauskas'answer không? Tôi không thể loại bỏ câu trả lời của tôi kể từ khi bạn chấp nhận nó, buty tôi quên Ruby xử lý (một số) ký tự meta regex khác với hầu hết các triển khai regex. Cảm ơn. –

+0

Xong. Cảm ơn bạn cả trả lời của bạn. – doctororange

Trả lời

64

Bạn có thể kết hợp đầu chuỗi bằng \A và kết thúc bằng \Z. Trong ruby ​​^ và cũng $ trận đấu bắt đầu và cuối dòng, tương ứng:

>> "a\na" =~ /^a$/ 
=> 0 
>> "a\na" =~ /\Aa\Z/ 
=> nil 
>> "a\na" =~ /\Aa\na\Z/ 
=> 0 
+4

Bạn muốn sử dụng \ z thay vì \ Z để khớp với toàn bộ chuỗi. '" hi \ n "= ~/\ Ahi \ Z /' –

+1

Giá trị trả về (khi không phải là nil) là chỉ số của ký tự đầu tiên của trận đấu đầu tiên. –

4

Vì vậy, những gì bạn đang yêu cầu là làm thế nào để kiểm tra xem hai chuỗi bằng nhau, phải không? Chỉ cần sử dụng chuỗi bình đẳng! Đây qua mỗi đơn một trong những ví dụ mà cả bạn và Tomas trích dẫn:

'ee' == 'street' # => false 
'ee' == 'ee'  # => true 
"a\na" == 'a'  # => false 
"a\na" == "a\na" # => true 
+2

Điều này đúng, nhưng một biểu thức chính quy cũng cho phép bạn mở rộng định nghĩa của bạn 'bình đẳng' thành những thứ như/^ (ee | oo) $/khá độc đáo. – doctororange

+5

Bạn có nhận được 5 lần đó không? Ý tôi là nó thực sự hữu ích cho 5 người để được thông báo rằng bạn có thể kiểm tra chuỗi bình đẳng với các hoạt động bằng ...: o xD Tôi có nghĩa là không có hành vi phạm tội, nhưng hey come on, là điều này cho thực? – Timo

+1

@Timo Lehto: Nó vượt qua mọi đặc điểm kỹ thuật duy nhất mà OP cung cấp, cộng với mọi ví dụ trong câu trả lời khác, và nó đơn giản hơn nhiều so với câu trả lời khác. Tôi không thấy có gì sai với điều đó. –

15

Điều này dường như làm việc cho tôi, mặc dù nó trông xấu xí (có thể là một cách hấp dẫn hơn nó có thể được thực hiện):

!(string =~ /^ee$/).nil? 

Tất nhiên mọi thứ bên trong // ở trên có thể là bất kỳ regex nào bạn muốn.

Ví dụ:

>> string = "street" 
=> "street" 
>> !(string =~ /^ee$/).nil? 
=> false 
>> string = "ee" 
=> "ee" 
>> !(string =~ /^ee$/).nil? 
=> true 

Lưu ý: Tested trong Rails console với ruby ​​(1.8.7) và lan can (3.1.1)

Các vấn đề liên quan