Adiciona valor constante ao atributo numérico XML

2

Antecedentes

Adicione um valor constante aos números correspondentes a uma expressão regular, usando vim (gvim).

Problema

A seguinte expressão regular corresponderá a width="32" :

/width="\([0-9]\{2\}\)"

Pergunta

Como você substitui o valor numérico do atributo width pelos resultados de uma expressão matemática que usa o valor do atributo? Por exemplo, gostaria de realizar a seguinte substituição global:

:%s/width="\([0-9]\{2\}\)"/width="+10"/g

Isso produziria width="42" para width="32" e width="105" para width="95" .

Obrigado!

    
por Dave Jarvis 14.01.2011 / 20:57

1 resposta

4

Para fazer avaliação de expressão na substituição, consulte:

:help :s\=
:help submatch()

Por exemplo:

:%s/width="\([0-9]\{2\}\)"/\='width="'.(submatch(1)+10).'"'/g

Quando você faz a substituição de expressão, toda a substituição deve ser uma expressão, portanto, é necessário concatenar (ver :help expr-. ) os três elementos da expressão. Dividido:

  • \=

Indique que o padrão de substituição é uma expressão.

  • 'width="'

A primeira string.

  • (submatch(1) + 10)

Adicione dez à primeira correspondência de sub-padrão - entre parênteses, para que o Vim não tente incluir a string anterior na operação de adição.

  • '"'

A cotação de fechamento como uma string.

(Observe que eu não incluí os operadores de concatenação no detalhamento).

    
por 14.01.2011 / 23:11