如何使用搜索/替换访问vim中的正则表达式匹配?

时间:2013-09-25 13:51:16

标签: regex vim

样品:

function foobar($arg1 = null, $arg2 = null) {
    $_a = $arg1;
    $_b = $arg2;
}

我想写一个搜索并在vim中替换正则表达式:

function foobar($arg1 = null, $arg2 = null) {
   $_a = (!$arg1) ? $arg1 : 1;
   $_b = (!$arg2) ? $arg2 : 1;
 }

这是我到目前为止所尝试的:

  1. 使用.命令在vim中重复我的上一个操作,但它只将: 1;附加到行
  2. 我已经写了这个正则表达式的几十种变体,但无法按预期工作: %s/\$_a\t=\t*/(!\$arg1)\t\?\t\2\t\:\t1/g
  3. 手动替换行,但不言而喻,我必须在大量文件上执行此操作。
  4. 基本上我想做的是写一个匹配的正则表达式 $arg1然后将匹配与三元运算符括起来,但我无法访问vim中的正则表达式匹配。

    任何帮助将不胜感激!

    (不必在vim中完成,我对使用perl这样的建议持开放态度)

    谢谢!

1 个答案:

答案 0 :(得分:1)

尝试以下命令:

:%s/\(\$arg[0-9]\);/(!\1) ? \1 : 1;

以上命令将$arg1;替换为(!$arg1) ? $arg1 : 1;