regex - 我如何正则表达式匹配这 3 个场景?
问题描述
我有很多自动化运行一些 Azure 部署命令,我需要支持用引号包裹的值,而根本没有。它需要支持lookahead 和lookbehind。它在 Powershell 中运行,因此受支持。
我可以提取示例 1 和 2 OK 但不是第三个,而无需在每次捕获后运行条件和单独的正则表达式。我将如何在一个查询中匹配这个?
当前正则表达式:https ://regex101.com/r/qgX6aQ/1:(?<= --resource-group ['"])(.*?)(?=['" ])
在这个例子中,我需要提取RGName
:
az vm create --resource-group "RGName" --name 'VMName'
az vm create --resource-group 'RGName' --name VMName
az vm create --resource-group RGName --name "VMName"
解决方案
要获得匹配,您不需要向后看,您可以匹配它。
您可以使用命名的捕获组,例如value
. 要将开始的单引号或双引号与结束的单引号或双引号匹配,您还可以使用带有反向引用的捕获组\1
该模式要么匹配从开始到结束的单引号或双引号,要么匹配除空白字符或单引号和双引号之外的任何字符。
最后的空格也不是强制性的。
--resource-group (?:(["'])(?<value>.*?)\1|(?<value>[^\s"']+))
解释
--resource-group
从字面上匹配(?:
非捕获组(["'])
捕获组 1,匹配"
或'
(?<value>.*?)
命名组值,匹配除换行符以外的任何字符,尽可能少的字符\1
对第 1 组的反向引用,匹配之前匹配的"
或'
|
或者(?<value>[^\s"']+)
命名组值,匹配 1+ 次出现的任何字符,除了空格"
或'
)
关闭非捕获组
推荐阅读
- powershell - 在 PowerShell 中使用标头将文本文件溢出到 tsv UTF-8
- accessibility - UWP - 值发生变化时的automationProperties.Name
- sql-server - django-mssql-backend - 无效的连接字符串属性(0)
- javascript - 每天每 12 小时显示剩余小时数
- python - 我的电子表格阅读功能不断覆盖所有内容
- scala - 流中的 putRecord 无法找到 firehose
- android - 在前台服务的 onCreate() 中添加的广播接收器不起作用
- sql - 如何在BigQuery中获取两行之间的差异**和**差异所在字段的名称?
- django - Django 子模型不继承 Meta 内部类
- fpga - Xilinx Mircrozed 在 QSPI 启动模式错误上加载新比特流