0

我需要替换以下内容:

CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`

CREATE TABLE IF NOT EXISTS `access`

我试过了

:%s/\/\*\!\d+(.*)\*\//\1/g

但这似乎并没有发生。我究竟做错了什么?

4

3 回答 3

4

vim 需要反斜杠 + (或使用 * 代替)。此外,您需要在 vim 中使用反斜杠分组括号。因此:

:%s/\/\*\!\d\+\(.*\)\*\//\1/g

是的,vim 的老式 posix 正则表达式很糟糕:/

编辑:正如下面评论中提到的,如果转义为 \+,+ 确实有效。并且 \d 实际上是受支持的,哎呀。编辑了示例正则表达式以纠正此问题。另请参阅 Brian Carper 的示例以获得更简洁易读的版本。

于 2009-05-05T05:37:52.153 回答
4

使用“非常神奇”,并使用默认分隔符以外的分隔符使其更易于阅读(和记住)。

:%s@\v/\*!\d+(.*)\*/@\1@g

如果没有“非常神奇”,您必须在 and 前面加上反斜杠+()但不能在前面*或其他一些东西前面)。这不是很一致。

于 2009-05-05T05:48:12.097 回答
1

使用 [^*]+ 略有不同且效率更高 :-)

1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1
于 2009-05-05T06:11:19.233 回答