Решение вашей X-проблемы состоит в том, чтобы безопасно избежать любой последовательности, которая может помешать интерпретатору.
У Lua есть опция %q
для string.format , который будет форматировать и экранировать предоставленную строку таким образом, что Lua сможет безопасно ее прочитать.Это также должно быть верно для вашего интерпретатора C.
Пример строки: This \string's truly"tricky
Если вы просто заключите его в одинарные или двойные кавычки, все равно будетцитата, которая рано завершила строку.Также есть недопустимая escape-последовательность \s
.
Представьте себе, что эта строка уже правильно обработана в Lua, поэтому мы просто передадим ее в качестве параметра: string.format("%q", 'This \\string\'s truly"tricky')
возвращает (уведомление,Я использовал одинарные кавычки при вводе кода):
"This \\string's truly\"tricky"
Теперь это полностью допустимая строка Lua, которую можно записывать и читать из файла.Не нужно вручную избегать каждого специального символа и рисковать ошибками реализации.
Чтобы правильно реализовать ваш подход Y , чтобы экранировать (недопустимые) символы с \
, используйте правильное сопоставление с шаблоном для замены захваченной строки на префикс + захваченная строка:
string.gsub('he"ll"o', "[\"']", "\\%1") -- will prepend backslash to any quote