2014-09-10 13 views
6

Tôi đang chạy phương pháp grep để lọc theo đối sánh mẫu. Đây là một mã ví dụ.Biến Ruby bên trong Mã Regex

companies.grep /city/ 

Tuy nhiên, ruby ​​không cho phép tôi nhập mã vùng bằng khối bên trong đường ray. Thay vào đó, tôi buộc phải mã hóa nó như vậy:

companies.grep /miami/ 

Xin lưu ý, thành phố là một biến. Ví dụ:

city = miami 

Tuy nhiên, nó cập nhật. Bạn có biết tôi có thể chuyển một biến thông qua phương thức grep không?

Ngoài ra, tôi cố gắng companies.grep/# {city} /, nhưng nó đã không làm việc

Trả lời

18
companies.grep /#{city}/ 
# or 
companies.grep Regexp.new(city) 

Trong trường hợp truy vấn alpha-số đơn giản, điều này sẽ là đủ; nhưng tốt hơn là nên thực hành thoát khỏi những thứ đó, nếu bạn không có ý định khai thác regexp. Do đó, phiên bản tốt hơn:

companies.grep /#{Regexp.escape city}/ 
# or 
companies.grep Regexp.new(Regexp.escape city) 
+0

Regexp.new (thành phố) đã thực hiện thủ thuật. Cảm ơn – user3465296

+0

Hai yếu tố này tương đương nhau. Không có cơ hội cho '/ # {city} /' thành thất bại và 'Regexp.new (city)' thành công, cho cùng 'city' (trừ khi ai đó đi và định nghĩa lại' Regexp' để gây rối với bạn). – Amadan

+0

Tuy nhiên, nó đã ở chế độ xem đường ray trong khi Regexp.new (thành phố) đã thành công – user3465296