我有很多自动操作,运行一些Azure部署命令,我需要支持用引号包装的值,而一点也不支持。它需要支持前瞻性和前瞻性。它在Powershell中运行,因此是受支持的。
我可以提取示例1和2,OK,但不需要在每次捕获之后运行条件和单独的正则表达式。如何在一个查询中匹配这一点?
当前Regex:https://regex101.com/r/qgX6aQ/1:(?<= --resource-group ['"])(.*?)(?=['" ])
在本例中,我需要提取RGName:
az vm create --resource-group "RGName" --name 'VMName'az vm create --resource-group 'RGName' --name VMNameaz vm create --resource-group RGName --name "VMName"发布于 2020-09-18 11:01:40
为了得到匹配,您不需要一个查找,您可以只是匹配它。
您可以使用一个命名捕获组,例如value。若要将开头单引号或双引号与结束单引号或双引号匹配,还可以使用带有反向引用\1的捕获组。
该模式要么从开头到结束单引号或双引号匹配,要么匹配除空格字符或单引号和双引号以外的任何字符。
最后的空间也不是强制性的。
--resource-group (?:(["'])(?<value>.*?)\1|(?<value>[^\s"']+))解释
--resource-group匹配(?:非捕获群(["'])捕获组1,匹配"或'(?<value>.*?)命名的组值,匹配除换行符以外的任何字符,尽可能减少字符数。\1反向引用到组1,匹配先前匹配的"或'|或(?<value>[^\s"']+)命名的组值,匹配除空白或"或'以外的任何字符的1+出现。)闭非捕获群

发布于 2020-09-18 02:45:35
我会把这三个案子分开处理:
(?<= --resource-group (
'(.*?)(?=')
|
"(.*?)(?=")
|
(\w*)
)
)发布于 2020-09-18 03:14:46
这在我的脑海中已经存在了很长一段时间了,而且我尝试过的大多数事情都会产生同样的错误"A quantifier inside a lookbehind makes it non-fixed width"。
将字符匹配移至looks之外看起来是可行的:
(?<= --resource-group )['"]?(.*?)(?=['" ])
我仍然很乐意在这方面提出建议和改进。
https://stackoverflow.com/questions/63948557
复制相似问题