Procura e substitui string no Vim

1

Eu tenho código semelhante a este:

$POST_['%']

onde% é qualquer comprimento qualquer letra + números e eu quero substituí-lo por

mysql_real_escape_string($POST['%'])

até agora eu construí este comando mas ele não reconhece $ POST ['.'] como qualquer string.

:%s/$_POST['.']/mysql_escape_string($_POST['\=submatch(0)'])/gc
    
por James 17.12.2012 / 21:42

4 respostas

2

Primeiro, seu uso de \=submatch(0) é excessivamente complexo, apenas use \ 0. E esteja ciente de que a sub-partida 0 é sempre o padrão totalmente compatível, portanto, seu padrão substituto tem alguma redundância. Em segundo lugar, o . atom corresponde apenas a um caractere. E, finalmente, você precisa escapar do [] e do $ . Tente isso:

:%s/\$_POST\['.\{-}'\]/mysql_escape_string(
:%s/\$_POST\['.\{-}'\]/mysql_escape_string(%pre%)/gc
)/gc

O uso de \{-} significa corresponder a qualquer número do átomo anterior, de maneira não-gulosa (ao contrário de * ).

Também noto que seus exemplos são inconsistentes entre si. É " $POST_[...] ", " $_POST[...] " ou apenas " $POST[...] "?

Você pode dar uma olhada em um livro como Dominar expressões regulares .

    
por 17.12.2012 / 22:10
2

$, [e] são metacaracteres em expressões regulares. Tente isto (não testado)

:%s/\$_POST\['.'\]/mysql_escape_string(\$_POST\['\=submatch(0)'\])/gc

[edit] Obrigado @tink

    
por 17.12.2012 / 22:01
1
s/^\(.*\)$/mysql_real_escape_string()/

parece fazer o que você quer. É simples, já que você está apenas adicionando texto ao redor da string existente, em vez de realmente substituir as coisas dentro dela.

    
por 17.12.2012 / 21:51
0

8 meses depois, e eu preciso disso novamente, então pensei em fornecer uma solução simples:

sed 's/\$_GET\[\(.*\)\]/mysqli_real_escape_string(\$_GET\[\])/g' test.php
    
por 31.08.2013 / 14:57