Как я могу избежать подстановочных знаков базы данных в рубине? - PullRequest
0 голосов
/ 13 сентября 2010

Я пытаюсь использовать String # gsub для добавления косой черты перед% или?, Которую я затем буду использовать в запросе LIKE.Я получаю странное поведение, которое, надеюсь, кто-то может объяснить:

irb(main):018:0> "%?".gsub(/([%\?])/, '\1')
=> "%?"
irb(main):019:0> "%?".gsub(/([%\?])/, '\\1')
=> "%?"
irb(main):020:0> "%?".gsub(/([%\?])/, '\\\1')
=> "\\1\\1"
irb(main):021:0> "%?".gsub(/([%\?])/, '\\\\1')
=> "\\1\\1"

В настоящий момент я работаю над этим, просто выполняя два отдельных gsub с использованием строк, но мне очень хотелось бы знать, если кто-нибудьмогу объяснить, что происходит!

1 Ответ

2 голосов
/ 13 сентября 2010

Вы остановили одну короткую цель:)

>> '%?'.gsub(/([%\?])/, '\\\\\1')
=> "\\%\\?"

Строки в одинарных кавычках в Ruby не принимают escape-символы, поэтому '\1' и '\\1' анализируются так же, как '\\\1' и '\\\\1'. Вы хотите передать gsub аргумент \\\1 (три обратных слеша), поэтому для его записи в виде строкового литерала требуется пять (в действительности шесть) буквенных обратных слешей.

Вероятно, это тот случай, когда использование строк в двойных кавычках менее подвержено ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...