给定命令行
mycommand --optional-arguments their-values <patternOfInterestWithDirectoryPath> arg1 arg2patternOfInterestWithDirectoryPath可以是以下任何一种
path/to/dir
/path/to/dir
path/to/dir/
"path/to/dir"
"/path/to/dir"
"path/to/dir/"在上述任何一种情况下,ask都是提取/path/to/dir的,其中有些可能(或不可能)用双引号括在一起,并且/或可能(或可能没有)有一个前导/。
下面的regex确实匹配,但它也提取了最后一个正斜杠。
\S*mycommand\s+(?:-\S+\s+)*\"?([^\"]+)\/?\"?.*像这样附加一个负的前瞻性是行不通的。
\S*mycommand\s+(?:-\S+\s+)*"?([^\s"]+(?!\/"))\/?"?.*如何忽略提取字符,这些字符是regex组的一部分,但位于特定位置(如最右边)?
发布于 2022-01-03 10:02:51
您可以使用
\S*mycommand\s+(?:-\S+\s+)*(?|"([^"]*?)\/?"|(\S+)(?<!\/)).*见regex演示。详细信息
\S* -零或多个非空白字符mycommand -一个文字字符串\s+ -一个或多个空白空间(?:-\S+\s+)* -零或多个-出现,一个或多个非空白空间,一个或多个空白空间(?|"([^"]*?)\/?"|(\S+)(?<!\/)) -一个匹配的分支复位组:"([^"]*?)\/?" - ",Group 1捕获除"以外的任何零或多个字符,尽可能少,然后捕获可选的/和"字符。| -或(\S+)(?<!\/) -第1组(组ID仍然是1,因为它位于分支重置组内):一个或多个空白空间,末尾没有/.* -剩下的部分。https://stackoverflow.com/questions/70563862
复制相似问题