如何编写正则表达式匹配YAML中不以连字符开头的键值对
正则表达式调整方案
问题原因
你之前优化后的正则匹配失败主要有两个核心问题:
- 负向先行断言排除带连字符的行后,没有预留缩进空格的匹配逻辑,直接要求行首就是键名字符,YAML中带缩进的属性行自然无法命中
- 值的匹配规则过于严格,仅支持字母、数字、横杠、点、斜杠,无法匹配包含冒号、引号的合法YAML值
可用正则表达式
^(?!\s*-)\s*([\w.-]+)\s*:\s*(.*?)\s*$
规则说明
^(?!\s*-):负向先行断言,排除所有行开头带任意空格+连字符的行\s*:匹配键前面的任意缩进空格([\w.-]+):捕获YAML的键名,支持字母、数字、下划线、横杠、点\s*:\s*:匹配键值分隔的冒号,支持冒号前后的任意空格(.*?):非贪婪捕获值内容,兼容带引号、冒号、斜杠等各类符号的YAML值\s*$:匹配行尾多余空格
匹配效果验证
针对你给出的示例YAML,该正则会精准命中以下两行:
image: us-west-2.amazonaws.com/abcd:45 mountPath: "/etc/keys/ssl"
完全符合预期要求。
内容的提问来源于stack exchange,提问作者defiant
相关产品推荐
相关产品推荐

