2012-04-02 20 views
0
<?php echo $form->create(); ?> 
    <?php echo $form->hidden('id'); ?> 
    <?php echo $form->input('name')); ?> 
    <?php echo $form->submit('Save'); ?> 
<?php echo $form->end(); ?> 

";"を置き換えますか? 「?」と一緒に。viを1つの疑問符の代わりに2つの疑問符に置き換えます。

私はviコマンド ":%s /; \?/ \?/ g"を使ってこれを行いました。私は次の出力を得ました

<?php echo $form->create() ??> 
    <?php echo $form->hidden('id') ??> 
    <?php echo $form->input('name')) ??> 
    <?php echo $form->submit('Save') ??> 
<?php echo $form->end() ??> 

実際には、次の出力が必要です。

<?php echo $form->create() ?> 
    <?php echo $form->hidden('id') ?> 
    <?php echo $form->input('name')) ?> 
    <?php echo $form->submit('Save') ?> 
<?php echo $form->end() ?> 

この奇妙な動作の説明はありますか?

答えて

2

\?は、他のプログラムの正規表現の正規表現?のvi正規表現です。

:h regexを参照すると、これを確認できます(正確には:h E61)。

; \?を使用すると、;(空白なし)と;<space>(1つのスペース)と一致します。これらのマッチから、最も貪欲なもの(E61参照 - できるだけ多く)は?に置き換えられ、スペースが存在するときには2つの疑問符(新しいものと古いもの)が返されます。

正しい式は次のようになります。s/; ?/ ?/g

EDIT:より正確に固定されて説明。

1

:%s/; \?/ \?/g

; \?試合;<space>ゼロまたは1時間、そしてそれは?に置き換えます。
したがって、元の?と別の?が得られます。

関連する問題