Сопоставить исполняемый файл с путем, который может содержать пробелы - PullRequest
0 голосов
/ 15 апреля 2019

Мы можем предположить, что пробел будет экранирован \.Все, включая двоичный файл, должно совпадать, за исключением необязательного списка аргументов.Например:

C:\Program\ Folder\paint.exe -some arg => C:\Program Folder\paint.exe

convert lots of args => convert

/usr/bin/ls documents => /usr/bin/ls

/optional\ utils/util --help => /optional utils/util

Было бы неплохо найти решение для движка Java по умолчанию, но я могу преобразовать его, если необходимо.

Ответы [ 3 ]

2 голосов
/ 15 апреля 2019

Вы можете использовать это регулярное выражение, соответствующее имени команды, которое может включать любое количество экранированных символов:

^[^\s\\]+(?:\\.[^\s\\]*)*

Демонстрация RegEx

RegExПодробности:

  • ^: начало
  • [^\s\\]+: совпадение с 1+ символами, которые не являются обратной косой чертой и пробелами
  • (?:\\.[^\s\\]*)*: совпадение0 или более групп, состоящих из обратной косой черты, за которой следует экранированный символ, за которым следуют 0+ символов, которые не являются обратной косой чертой и пробелами
1 голос
/ 15 апреля 2019

Это регулярное выражение может помочь:

^(([^\s]|(\\ ))*)(?<!\\).*$

Однако, он будет соответствовать двоичным файлам , включая экранированные пробелы. Тебе придется покинуть пробел позже.

UPD: Результат находится в 1-й группе.

Вот рабочий пример: https://regex101.com/r/z5L3yz/1

Объяснение

  • [^\s] захватывает все, кроме пробелов
  • (\\ ) захватывает сбежавшее пространство
  • (([^\s]|(\\ ))*) - это группа, которую мы ищем (двоичное имя)
  • После группы мы используем негативный взгляд за (?<!\\), прежде чем что-то останется .*
0 голосов
/ 15 апреля 2019

Это будет захватывать любую строку, которая может содержать экранированные символы пробела. Все незаполненные пробелы и все, что осталось после, не фиксируется:

^((\\\s)*[^\s]?)+

^ - match begining of the line
 ( - begining 1st group
  ( - begining 2nd group
   \\\s - match "\ " (escape character and any white character after that)
       )* - end 2nd group - match any number of times
         [^\s]? - match anything that isn't white character one or zero occurences (we don't want it to eat escape character)
               )+ - end 1st group - match at least once
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...