Вызов гуру регулярных выражений. У меня сейчас есть некоторые проблемы с экранированием строки в Ruby, чтобы я мог передать ее в утилиту командной строки, используя exec
, %x{}
или подобное. Командная строка - это диалоговая функция TextMate, которая в основном работает следующим образом (Запустите это как скрипт оболочки в TextMate.):
$DIALOG -mp "items=('string1','string2', 'string3');" RequestItem
, но он также может использовать указанный вами nib-файл, например, "path / to / my / nib / file.nib". Поэтому мне нужно передать всю эту команду в виде строки exec
command = <<string
$DIALOG -mp "items=('string1','string2', 'string3');" "path/to/my/nib/file.nib"
string
exec command
Это работает нормально, естественно. Проблема, с которой я сталкиваюсь, состоит в том, что компоненты массива элементов определяются программно, поэтому мне нужно программно экранировать эту строку таким образом, чтобы она все правильно передавалась команде $DIALOG
.
Пока что я определил необходимость избегать одинарных кавычек, двойных кавычек, а также символов новой строки и табуляции. Я испробовал множество потенциальных решений для регулярных выражений, но пока не смог найти надежный механизм побега. В основном мне нужно заполнить
class String
def escape_for_dialog
self
end
end
с правильными self.gsub
вызовами, которые будут экранировать строки, которые я помещаю в параметры. Итак, давайте предположим, что мои параметры ищутся во время выполнения, вот что я думаю, что мне нужно сделать, используя тот же пример выше:
command = <<string
$DIALOG -mp "items=('#{item1.escape_for_dialog}', '#{item2.escape_for_dialog}', '#{item3.escape_for_dialog}');" "path/to/my/nib/file.nib"
string
exec command
Я выяснил, что стиль heredoc помогает избежать необходимости запоминать экранирование всех кавычек, но параметры все еще проблематичны, поэтому я прошу кого-то лучше с манипулированием строками и регулярными выражениями, чем помогать при заполнении этого метода строки. Я буду очень благодарен! :)