2015-01-10 4 views
0

Вот моя программа:рубин Regular Expression проблема

contact_data = [ 
    ["[email protected]", "123 Main st.", "555-123-4567"], 
    ["[email protected]", "404 Not Found Dr.", "123-234-3454"] 
] 

("Joe Smith").downcase #=> "joe smith" 
contact_data[0][0].slice(0..2) #=> "joe" 

("Joe Smith").downcase =~ /contact_data[0][0].slice(0..2)/ #=> nil 

Почему мой регулярное выражение не показывать матч?

+0

Обратите внимание, что вам не нужны круглые скобки '«Джо Смит»'. Когда вы не уверены, когда нужны скобки, выполните выражение без них. Хотя не 100%, если выражение все еще работает, они, вероятно, не требуются. Кроме того, если вы не знаете о различных формах [String # [\]] (http://www.ruby-doc.org/core-2.1.3/String.html#method-i-5B-5D) , все следующие return '' joe "': 'contact_data [0] [0] [0..2]', 'contact_data [0] [0] [0 ... 3]', 'contact_data [0] [0] [0,3] ',' contact_data [0] [0] [/. {3} /] '. –

ответ

4

Вы не можете вставлять код внутри обычного выражения.

Если работал, как мог рубин, возможно, знаете

x = 3 
/x/ 

... должен ли это регулярное выражение ... было соответствовать 3 или буквенный символ x? Как может вы пишете регулярное выражение в соответствии с простым символом x, если у вас была переменная x, определенная в локальной области?

Если вы хотите вставлять данные в регулярное выражение, вам нужно быть более явным. Используйте #{} интерполировать значение, как вы бы со строкой:

/#{contact_data[0][0].slice(0..2)}/ 
+0

Спасибо за помощь! –

+0

Стоит упомянуть, что вы можете использовать [Regexp :: new] (http://ruby-doc.org/core-2.1.1/Regexp.html#method-c-quote): Regexp.new (contact_data [ 0] [0] .slice (0..2)) # =>/joe/', а иногда лучше [Regexp :: quote] (http://ruby-doc.org/core-2.1.1/ Regexp.html # способ-с кавычками). –