Antecedentes
Considere o seguinte texto:
There are three types of font families: serif, sans serif, and
teletype. To switch between these families, use <cmd>rm</cmd> for
serif, <cmd>ss</cmd> for sans serif, and <cmd>tt</cmd> for teletype.
Gostaria de alterar <cmd>x</cmd>
para {{cmd|x}}
da seguinte forma:
There are three types of font families: serif, sans serif, and
teletype. To switch between these families, use {{cmd|rm}} for
serif, {{cmd|ss}} for sans serif, and {{cmd|tt}} for teletype.
Problema
A expressão regular para correspondências não gananciosas é complicada. Por exemplo, o seguinte não funciona no vim:
:%s/<cmd>\(.*\)<\/cmd>.\{-}/{{cmd|}}/
Nem o seguinte, com sed:
sed -e "/(<cmd>\(.*\)</cmd>).\{-}/{{cmd|}}/"
Os parênteses tentam corresponder os parênteses, em vez de agrupar a expressão para aplicar o operador não-ganancioso de \{-}
ou ?
. Escapar dos parênteses é usado para referências anteriores, o que é necessário apenas para o conteúdo de texto dentro da tag <cmd>
.
Pergunta
Qual é a sintaxe correta para substituir não-avidamente todas as ocorrências de <cmd>x</cmd>
com {{cmd|x}}
em um arquivo?
Nota: Esta não é uma tentativa de analisar HTML usando regex. ; -)