递归解析占位符

时间:2016-07-12 20:35:01

标签: regex

我正在尝试创建一个正则表达式来解析包含$ {anything}

形式的占位符的字符串

这很容易,使用这样的东西,我可以提取2美元:  (\ $ {(。*?)})

例如,当我想要占位符时,困难就出现了 如果primary_region =“americas”,而americas1 = unix-am-host1,那么我想要 $ {$ {primary_region} 1}解析为$ {americas} 1作为中间人,然后最终解析为unix-am-host1

当我应用上面的正则表达式时,$ 2会产生“$ {region”而不仅仅是“region” 所以我需要一个正则表达式,当应用于$ {$ {primary_region} 1}将提取primary_region,然后当我将它应用于$ {americas1}时,它将提取americas1

2 个答案:

答案 0 :(得分:1)

如果您的标识符只包含单词字符(根据它们的示例判断),请使用\w+(与1个或多个[a-zA-Z0-9_]字符匹配):

(\$\{(\w+)\})
      ^^^

请参阅regex demo

如果除了{}之外还有其他任何字符,您可以使用[^{}]否定的字符类:

(\$\{([^{}]+)\})

请参阅this regex demo

答案 1 :(得分:1)

最好的选择是每次从内到外重新匹配。

每次替换内容\$\{([^{}]+)\}
$1作为关键字替换散列值。