Код говорит обо всем:
teststring = "helloworld$"
string_from_user = "world$"
regexp = Regexp.escape(string_from_user) # assigns "world\\$"
p teststring =~ Regexp.new(regexp) # prints 0 => match found
p teststring =~ /regexp/ # prints nil => no match
То, что соответствует первому, упоминается в Regexp.escape документах.
Но почему не совпадает вторая версия?
Я обеспокоен тем, что мне нужно передать это регулярное выражение в сторонний код Ruby. Строка получена от пользователя, поэтому я хочу ее избежать. Затем в некоторых ситуациях я мог бы добавить дополнительные символы регулярного выражения в строку этого пользователя. Например, я мог бы передать "^helloworld\\$"
, чтобы сторонний код совпадал со строками типа "helloworld$othercontent"
.
Я обеспокоен тем, что если сторонний код использует =~ /regexp/
вместо =~ Regexp.new(regexp)
, у меня будут проблемы, потому что не будет совпадения, как указано кодом выше.