Azure DevOps 任务扩展的正则表达式
Regular expression with Azure DevOps task extension
我们正在使用磁盘管理更新我们的 Azure 虚拟机任务扩展。一个多行字段,让用户提供其数据磁盘的标签、字母和大小,并使用换行符和分号来分隔项目和磁盘。像这样:
"数据库磁盘";F;30
"临时数据库磁盘";G;30
"日志数据库";H;15E
这是task.json:
{
"name": "NewDataDisks",
"type": "multiLine",
"label": "Data Disks",
"required": false,
"groupName": "Disks",
"visibleRule": "AddDataDisk = true",
"defaultValue": "\"Database Disk\";F;30\n\"Temp Database Disk\";G;30\n\"Logs Database\";H;15",
"helpMarkDown": "Provide list of data disks with disk label, mount letters and disk capacity separated by a semicolon :\n\n \"Database Disk\";F;30\n\"Temp Database Disk\";G;30\n\"Logs Database\";H;15 \n\n Each virtual machine size has a max of data disks attached which can't be check in here. During release execution, a check will be done.",
"validation": {
"expression": "isMatch(value, '(^\"[a-z A-Z]+\";[a-zA-Z]{1};([1-9]+[0-9]+|[1-9]+)$)','Multiline')",
"message": "[Enter a valid datadisks list](https://regex101.com/r/WeDgsJ/1)"
}
}
问题是如果至少有一行匹配则验证将通过。但我希望每一行都完全匹配,但我很难找到如何使用正则表达式。任何帮助将不胜感激。
谢谢。
您可以删除 'Multiline'
选项(因为您需要将字符串视为整个文本,而不是 line-per-line 文本)并使用
'^"[a-z A-Z]+";[a-zA-Z];[1-9][0-9]*(?:\r?\n"[a-z A-Z]+";[a-zA-Z];[1-9][0-9]*)*$'
详情:
^
- 字符串开头
"
- 一个 "
字符
[a-z A-Z]+
- 一个或多个 ASCII 字母或 space
";
- ";
子字符串
[a-zA-Z]
- 一个 ASCII 字母
;
- 一个semi-colon
[1-9][0-9]*
- 一个 non-zero 数字,然后是零个或多个数字
(?:
- non-capturing“容器”组的开始:
\r?\n
- CRLF 或 LF 行结尾
"[a-z A-Z]+";[a-zA-Z];[1-9][0-9]*
- 与上面相同的模式
)*
- 组结束,重复零次或多次
$
- 字符串结尾。
我们正在使用磁盘管理更新我们的 Azure 虚拟机任务扩展。一个多行字段,让用户提供其数据磁盘的标签、字母和大小,并使用换行符和分号来分隔项目和磁盘。像这样:
"数据库磁盘";F;30
"临时数据库磁盘";G;30
"日志数据库";H;15E
这是task.json:
{
"name": "NewDataDisks",
"type": "multiLine",
"label": "Data Disks",
"required": false,
"groupName": "Disks",
"visibleRule": "AddDataDisk = true",
"defaultValue": "\"Database Disk\";F;30\n\"Temp Database Disk\";G;30\n\"Logs Database\";H;15",
"helpMarkDown": "Provide list of data disks with disk label, mount letters and disk capacity separated by a semicolon :\n\n \"Database Disk\";F;30\n\"Temp Database Disk\";G;30\n\"Logs Database\";H;15 \n\n Each virtual machine size has a max of data disks attached which can't be check in here. During release execution, a check will be done.",
"validation": {
"expression": "isMatch(value, '(^\"[a-z A-Z]+\";[a-zA-Z]{1};([1-9]+[0-9]+|[1-9]+)$)','Multiline')",
"message": "[Enter a valid datadisks list](https://regex101.com/r/WeDgsJ/1)"
}
}
问题是如果至少有一行匹配则验证将通过。但我希望每一行都完全匹配,但我很难找到如何使用正则表达式。任何帮助将不胜感激。
谢谢。
您可以删除 'Multiline'
选项(因为您需要将字符串视为整个文本,而不是 line-per-line 文本)并使用
'^"[a-z A-Z]+";[a-zA-Z];[1-9][0-9]*(?:\r?\n"[a-z A-Z]+";[a-zA-Z];[1-9][0-9]*)*$'
详情:
^
- 字符串开头"
- 一个"
字符[a-z A-Z]+
- 一个或多个 ASCII 字母或 space";
-";
子字符串[a-zA-Z]
- 一个 ASCII 字母;
- 一个semi-colon[1-9][0-9]*
- 一个 non-zero 数字,然后是零个或多个数字(?:
- non-capturing“容器”组的开始:\r?\n
- CRLF 或 LF 行结尾"[a-z A-Z]+";[a-zA-Z];[1-9][0-9]*
- 与上面相同的模式
)*
- 组结束,重复零次或多次$
- 字符串结尾。