У меня есть куча строки со специальными кодами, которые я хочу, чтобы хранить unescaped- например, интерпретатор показываетРубин - ищу свой род «Regexp» метод экранирования в
"\\014\"\\000\"\\016smoothing\"\\011mean\"\\022color\"\\[email protected]\\016"
, но я хочу, чтобы показать (при проверке) в качестве "\014\"\000\"\016smoothing\"\011mean\"\022color\"\[email protected]\016"
Каков метод их отмены? Я предполагаю, что я мог бы создать регулярное выражение, чтобы удалить 1 обратную косую черту с каждой последовательной n обратной косой черты, но у меня нет большого опыта регулярных выражений, и кажется, что это должно быть «более элегантным» способом сделать это.
Например, когда I puts MyString
отображает вывод, который я бы хотел, но я не знаю, как я мог бы захватить это в переменной.
Спасибо!
Отредактировано для добавления контекста: у меня есть этот класс, который используется для маршала/восстановления некоторых вещей, но когда я восстанавливаю некоторые старые строки, он выплескивает ошибку типа, которую я определил, потому что они не были - по какой-то необъяснимой причине - хранится как base64. Вместо этого они просто исчезают, чего я не хочу, потому что попытка их восстановления аналогичным образом дает TypeError TypeError: incompatible marshal file format (can't be read) format version 4.8 required; 92.48 given
, потому что Маршал смотрит на первые символы строки, чтобы определить формат.
require 'base64'
class MarshaledStuff < ActiveRecord::Base
validates_presence_of :marshaled_obj
def contents
obj = self.marshaled_obj
return Marshal.restore(Base64.decode64(obj))
end
def contents=(newcontents)
self.marshaled_obj = Base64.encode64(Marshal.dump(newcontents))
end
end
Edit 2: Измененные формулировки - я думал, что они были «двойным экранированием», но это было только однократным экранированием. Упс!
Хех, глядя на не сломанную строку, вы правы, что они только сбежали, но я не хочу, чтобы они бежали вообще! – RubyNoobie
@RubyNoobie: интерпретатор никогда не покажет ваш второй пример, потому что это не допустимая строка. Даже строка длиной одна с только одной цитатой будет отображаться как '' \ "" в интерпретаторе. Я думаю, ваша проблема кроется в другом месте. –
'Нет'? Или' nil'? – yfeldblum