Для тех, кто ответил на этот вопрос, важно отметить, что некоторым приложениям потребуется немного другое регулярное выражение в зависимости от того, как работают escape-символы в программе, которую вы пишете. Например, если вы пишете оболочку и хотите, чтобы команда отделялась пробелами и другими специальными символами, вам пришлось бы изменить свое регулярное выражение, чтобы включить слова только со специальными символами, если эти символы экранированы.
Так, например, допустимый путь будет
/usr/bin/program\ with\ space
в отличие от
/usr/bin/program with space
который будет ссылаться на "/ usr / bin / program" с аргументами "with" и "space"
Регулярное выражение для приведенного выше примера может быть "([^ \ 0] \ | \\) *"
Регулярное выражение, над которым я работал, (новая строка отделена для «читабельности»):
"\( # Either
[^\0 !$`&*()+] # A normal (non-special) character
\| # Or
\\\(\ |\!|\$|\`|\&|\*|\(|\)|\+\) # An escaped special character
\)\+" # Repeated >= 1 times
Что переводится как
"\([^\0 !$`&*()+]\|\\\(\ |\!|\$|\`|\&|\*|\(|\)|\+\)\)\+"
Создание собственного конкретного регулярного выражения также должно быть относительно простым.