R"(\bthis\b)"
является исходным строковым литералом , а не литералом регулярного выражения, если вы об этом думаете. В C ++ нет литералов регулярных выражений, но std::regexp
может быть сконструирован из массива символов или std::string
.
Таким образом, вы можете просто сделать
string word = "this";
R"(\b)" + word + R"(\b)"
или, что эквивалентно используя простые старые строковые литералы
string word = "this";
"\\b" + word + "\\b"
Примечание: В обоих случаях результатом является std::string
, потому что word
является std::string
. Это отличается от R"(\bword\b)"
, который представляет собой массив символов. На всякий случай разница имеет значение.
Слово предупреждения, хотя: содержание слова, вероятно, происходит извне программы. Вам нужно процитировать его, поскольку он может содержать символы, которые являются особыми в регулярных выражениях. В противном случае вы, вероятно, создаете уязвимость безопасности в своей программе. Вы должны быть в порядке для упражнений класса, которые никто, кроме вашего преподавателя, не будет смотреть, но лучше всего поместить в свой код строку, например
#warning "word" needs proper quoting to avoid security vulnerabilities
, если вы попытаетесь повторно использовать свои код через год, когда вы забыли об этой проблеме. Таким образом, компилятор вам напомнит.
Я не думаю, что можно отбросить все таблицы в одном хите, но можно сделать следующее для получения команд:
select 'drop table ' || name || ';' from sqlite_master
where type = 'table';
вывод этого является сценарием, который отбросит таблицы для Вас. Для индексов просто замените таблицу индексом.
можно использовать другие пункты в эти where
раздел для ограничения, какие таблицы или индексы выбраны (такой как" and name glob 'pax_*'
" для тех, которые запускаются с "мира _").
Вы могли объединить создание этого сценария с выполнением его в простом ударе (или cmd.exe) сценарий, таким образом, существует только одна команда для выполнения.
, Если Вы не заботитесь о приблизительно никакой из информации в DB, я думаю, что можно просто удалить файл, в котором это хранится от жесткого диска - это, вероятно, быстрее. Я никогда не тестировал это, но я не вижу, почему это не работало бы.
В то время как это верно, что нет никакой команды DROP ALL TABLES, можно использовать следующий набор команд.
Примечание: Эти команды имеют потенциал для повреждения базы данных, поэтому удостоверьтесь, что у Вас есть резервное копирование
PRAGMA writable_schema = 1;
delete from sqlite_master where type in ('table', 'index', 'trigger');
PRAGMA writable_schema = 0;
, Вы затем хотите восстановить удаленное пространство с
VACUUM;
и хороший тест, чтобы удостовериться, что все в порядке
PRAGMA INTEGRITY_CHECK;
После того как Вы отбросили все таблицы (и индексы исчезнут, когда таблица пойдет), затем нет ничего в базе данных SQLite насколько я знаю, хотя файл, кажется, не уменьшается (от быстрого теста, я просто сделал).
Настолько удаляющий файл, казалось бы, был бы самым быстрым - он должен просто быть воссоздан, когда Ваше приложение пытается получить доступ к файлу дб.