首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免提取正则组中的最后一个特定字符?

如何避免提取正则组中的最后一个特定字符?
EN

Stack Overflow用户
提问于 2022-01-03 09:40:30
回答 1查看 42关注 0票数 1

给定命令行

代码语言:javascript
复制
mycommand --optional-arguments their-values <patternOfInterestWithDirectoryPath> arg1 arg2

patternOfInterestWithDirectoryPath可以是以下任何一种

代码语言:javascript
复制
path/to/dir
/path/to/dir
path/to/dir/
"path/to/dir"
"/path/to/dir"
"path/to/dir/"

在上述任何一种情况下,ask都是提取/path/to/dir的,其中有些可能(或不可能)用双引号括在一起,并且/或可能(或可能没有)有一个前导/

下面的regex确实匹配,但它也提取了最后一个正斜杠。

代码语言:javascript
复制
 \S*mycommand\s+(?:-\S+\s+)*\"?([^\"]+)\/?\"?.*

像这样附加一个负的前瞻性是行不通的。

代码语言:javascript
复制
 \S*mycommand\s+(?:-\S+\s+)*"?([^\s"]+(?!\/"))\/?"?.*

如何忽略提取字符,这些字符是regex组的一部分,但位于特定位置(如最右边)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-03 10:02:51

您可以使用

代码语言:javascript
复制
\S*mycommand\s+(?:-\S+\s+)*(?|"([^"]*?)\/?"|(\S+)(?<!\/)).*

regex演示。详细信息

  • \S* -零或多个非空白字符
  • mycommand -一个文字字符串
  • \s+ -一个或多个空白空间
  • (?:-\S+\s+)* -零或多个-出现,一个或多个非空白空间,一个或多个空白空间
  • (?|"([^"]*?)\/?"|(\S+)(?<!\/)) -一个匹配的分支复位组
    • "([^"]*?)\/?" - ",Group 1捕获除"以外的任何零或多个字符,尽可能少,然后捕获可选的/"字符。
    • | -或
    • (\S+)(?<!\/) -第1组(组ID仍然是1,因为它位于分支重置组内):一个或多个空白空间,末尾没有/

  • .* -剩下的部分。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70563862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档