首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与这3种场景匹配?

如何与这3种场景匹配?
EN

Stack Overflow用户
提问于 2020-09-18 02:35:51
回答 3查看 90关注 0票数 0

我有很多自动操作,运行一些Azure部署命令,我需要支持用引号包装的值,而一点也不支持。它需要支持前瞻性和前瞻性。它在Powershell中运行,因此是受支持的。

我可以提取示例1和2,OK,但不需要在每次捕获之后运行条件和单独的正则表达式。如何在一个查询中匹配这一点?

当前Regex:https://regex101.com/r/qgX6aQ/1(?<= --resource-group ['"])(.*?)(?=['" ])

在本例中,我需要提取RGName

  1. az vm create --resource-group "RGName" --name 'VMName'
  2. az vm create --resource-group 'RGName' --name VMName
  3. az vm create --resource-group RGName --name "VMName"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-18 11:01:40

为了得到匹配,您不需要一个查找,您可以只是匹配它。

您可以使用一个命名捕获组,例如value。若要将开头单引号或双引号与结束单引号或双引号匹配,还可以使用带有反向引用\1的捕获组。

该模式要么从开头到结束单引号或双引号匹配,要么匹配除空格字符或单引号和双引号以外的任何字符。

最后的空间也不是强制性的。

代码语言:javascript
复制
--resource-group (?:(["'])(?<value>.*?)\1|(?<value>[^\s"']+))

解释

  • --resource-group匹配
  • (?:非捕获群
    • (["'])捕获组1,匹配"'
    • (?<value>.*?)命名的组值,匹配除换行符以外的任何字符,尽可能减少字符数。
    • \1反向引用到组1,匹配先前匹配的"'
    • |
    • (?<value>[^\s"']+)命名的组值,匹配除空白或"'以外的任何字符的1+出现。

  • )闭非捕获群

Regex演示

票数 1
EN

Stack Overflow用户

发布于 2020-09-18 02:45:35

我会把这三个案子分开处理:

代码语言:javascript
复制
(?<= --resource-group (
  '(.*?)(?=')
  |
  "(.*?)(?=")
  |
  (\w*)
  )
)
票数 0
EN

Stack Overflow用户

发布于 2020-09-18 03:14:46

这在我的脑海中已经存在了很长一段时间了,而且我尝试过的大多数事情都会产生同样的错误"A quantifier inside a lookbehind makes it non-fixed width"

将字符匹配移至looks之外看起来是可行的:

(?<= --resource-group )['"]?(.*?)(?=['" ])

我仍然很乐意在这方面提出建议和改进。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63948557

复制
相关文章

相似问题

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