Фон
Рассмотрим следующий текст:
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.
Я хотел бы изменить <cmd>x</cmd>
на {{cmd|x}}
следующим образом:
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.
проблема
Регулярное выражение для не жадных совпадений сложно. Например, следующее не работает в vim:
:%s/<cmd>\(.*\)<\/cmd>.\{-}/{{cmd|\1}}/
Также, как и в случае с sed:
sed -e "/(<cmd>\(.*\)</cmd>).\{-}/{{cmd|\1}}/"
Круглые скобки пытаются сопоставить круглые скобки, а не группировать выражение для применения не жадного оператора: \{-}
или ?
, Экранирование скобок используется для обратных ссылок, что требуется только для текстового содержимого внутри <cmd>
.
Вопрос
Каков правильный синтаксис для не жадной замены всех вхождений <cmd>x</cmd>
на {{cmd|x}}
в файле?
Примечание. Это не попытка разобрать HTML с помощью регулярных выражений. ;-)