Как избежать одиночных и двойных кавычек в строке?
Я хочу избежать одиночных и двойных кавычек вместе. Я знаю, как передавать их отдельно, но не знаю, как пройти их оба.
например: str = "ruby 'on rails" " = ruby 'on rails"
Как избежать одиночных и двойных кавычек в строке?
Я хочу избежать одиночных и двойных кавычек вместе. Я знаю, как передавать их отдельно, но не знаю, как пройти их оба.
например: str = "ruby 'on rails" " = ruby 'on rails"
Мой предпочтительный способ - не беспокоиться об экранировании и использовании% q (который действует как одиночная кавычная строка) или% Q для поведения с двойной кавычкой строки.
так
str = %q[ruby 'on rails"] # Single quoting
str2 = %Q[quoting with #{str}] # will insert variable
Использовать обратную косую черту для удаления символов
str = "ruby \'on rails\" "
Вы можете использовать строки Q, которые позволяют использовать любой разделитель, который вам нравится:
str = %Q|ruby 'on rails" " = ruby 'on rails|
Вот полный список:
>> str = "ruby 'on rails\" \" = ruby 'on rails"
=> "ruby 'on rails" " = ruby 'on rails"
Я бы пошел с heredoc, если я начну беспокоиться о побеге. Он позаботится об этом для вас:
string = <<MARKER
I don't have to "worry" about escaping!!'"!!
MARKER
MARKER определяет начало/конец строки. начните строку на следующей строке после открытия heredoc, затем закончите строку, используя разделитель снова на собственной строке.
Это делает все необходимое и преобразуется в строку с двойными кавычками:
string
=> "I don't have to \"worry\" about escaping!!'\"!!\n"
Я бы использовал просто:
str = %(ruby 'on rails ")
Поскольку только %
означает двойные кавычки (или% Q) и позволяет интерполировать переменные в строке.
Одно предупреждение:
Использование %Q[]
и %Q[]
для сравнения строк не является интуитивно безопасным.
Например, если вы загружаете что-то, что означает означать что-то пустое, например ""
или ''
, вам нужно использовать фактические escape-последовательности. Например, пусть qvar
равно ""
вместо любой пустой строки.
Это будет оцениваться до false
if qvar == "%Q[]"
Как это будет, if qvar == %Q[]
Пока это будет оцениваться до true
if qvar == "\"\""
Я столкнулся с этой проблемой при отправке ключей командной строки из другого стека в ruby script. Только ответ Габриэля Аугусто работал у меня.
Вот пример использования %Q[]
в более сложном сценарии:
%Q[
<meta property="og:title" content="#{@title}" />
<meta property="og:description" content="#{@fullname} profile. #{@fullname} location, ranking, outcomes, and more." />
].html_safe