将可执行文件与可能包含空格的路径匹配

时间:2019-04-15 14:48:29

标签: regex path

我们可以假设\会将空格转义。 包括二进制在内的Eveerything应该匹配,排除可选的参数列表。 例如:

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 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式来匹配可能包含任意数量的转义字符的命令名称:

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

RegEx Demo

RegEx详细信息:

  • ^:开始
  • [^\s\\]+:匹配1个以上非反斜杠和空格的字符
  • (?:\\.[^\s\\]*)*:匹配0个或更多的组,包括反斜杠,后跟转义字符,然后是非斜杠和空格的0+个字符

答案 1 :(得分:1)

此正则表达式可能会有所帮助:

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

但是,它将匹配二进制文件包括转义的空格。您稍后必须取消转义空间。

UPD:结果在第一组中。

这是一个有效的示例:https://regex101.com/r/z5L3yz/1

说明

  • [^\s]捕获除空格字符之外的所有内容
  • (\\ )捕获一个逃逸空间
  • (([^\s]|(\\ ))*)是我们正在寻找的组(二进制名称)
  • 在该组之后,我们在所有(?<!\\)之前的后面使用.*后面的否定后视

答案 2 :(得分:0)

这将捕获任何可能包含转义空格字符的字符串。任何未转义的空白以及之后的所有内容均不会捕获:

^((\\\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