给定一个命令行
mycommand --optional-arguments their-values <patternOfInterestWithDirectoryPath> arg1 arg2
patternOfInterestWithDirectoryPath可以是以下中的任何一个
path/to/dir
/path/to/dir
path/to/dir/
"path/to/dir"
"/path/to/dir"
"path/to/dir/"
在以上任何一种情况下,任务都是在所有情况下提取/path/to/dir
,其中一些可能(或可能不(用双引号括起来,和/或可能(或不(有前导/
下面的正则表达式确实匹配,但它也提取最后一个正斜杠。
S*mycommands+(?:-S+s+)*"?([^"]+)/?"?.*
附加这样的负面展望是不起作用的
S*mycommands+(?:-S+s+)*"?([^s"]+(?!/"))/?"?.*
有什么线索可以忽略正则表达式组中特定位置(如最右边(的提取字符吗?
您可以使用
S*mycommands+(?:-S+s+)*(?|"([^"]*?)/?"|(S+)(?<!/)).*
请参阅regex演示详细信息:
S*
-零个或多个非空白字符mycommand
-文字字符串s+
-一个或多个空白(?:-S+s+)*
-零次或多次出现-
、一个或多个非空白、一个或者多个空白(?|"([^"]*?)/?"|(S+)(?<!/))
-一个分支重置组,匹配以下任一项:"([^"]*?)/?"
-"
,组1捕获除"
之外的任何零个或多个字符,尽可能少,然后是可选的/
和"
字符|
-或(S+)(?<!/)
-组1(组ID仍然是1
,因为它在分支重置组内(:一个或多个末尾没有/
的空白
.*
—线路的其余部分