Как я могу создать регулярное выражение для строки, такие как это:Как обрабатывать строку, например, с помощью регулярных выражений?
<SERVER> <SERVERKEY> <COMMAND> <FOLDERPATH> <RETENTION> <TRANSFERMODE> <OUTPUTPATH> <LOGTO> <OPTIONAL-MAXSIZE> <OPTIONAL-OFFSET>
Большинство из этих полей только простые слова, но некоторые из них могут быть пути, такие как путь_к_папке, OutputPath, эти пути могут быть также пути с именем файла и подстановочным знаком.
Сохранение - это номер, а режим передачи может быть бином или ascii. Проблема заключается в том, что LOGTO может быть путём с именем файла журнала, добавленным к нему, или может быть НЕТ, что означает отсутствие файла журнала.
Основная проблема, это необязательные аргументы, они оба числа, а OFFSET не может существовать без MAXSIZE, но MAXSIZE может существовать без смещения.
Heres некоторые примеры:
loveserver love copy /muffin* 20 bin C:\Puppies\ NO 256 300
loveserver love copy /muffin* 20 bin C:\Puppies\ NO 256
loveserver love copy /hats* 300 ascii C:\Puppies\no\ C:\log\love.log 256
Теперь главный вопрос, является то, что пути могут иметь пробелы в них, так что если я использую. чтобы соответствовать всем, регулярное выражение заканчивается разрывом при анализе необязательных аргументов, в которых конечный пункт LOG заканчивается присоединением к пути вывода.
Также, если я в конечном итоге использую. и начните удалять его части, регулярное выражение начнет помещать вещи туда, где это не должно.
Heres мое регулярное выражение:
^(\s+)?(?P<SRCHOST>.+)(\s+)(?P<SRCKEY>.+)(\s+)(?P<COMMAND>COPY)(\s+)(?P<SRCDIR>.+)(\s+)(?P<RETENTION>\d+)(\s+)(?P<TRANSFER_MODE>BIN|ASC|BINARY|ASCII)(\s+)(?P<DSTDIR>.+)(\s+)(?P<LOGFILE>.+)(\s+)?(?P<SIZE>\d+)?(\s+)?(?P<OFFSET>\d+)?$
Это было потрясающе. Большое спасибо. – UberJumper