1

当您尝试从一行中删除 html 标签时,一种可能的方法是使用 :s 命令并编写一个同时理解标签开头和结尾的正则表达式。我的目标是:

:s %</?center>%%g

但是这样,vim 说它什么也没找到。所以我不得不改用以下方法,这很有效:

:s %</*center>%%g

为什么一个有效而另一个无效?不应该?说“之前的角色可以来一次,或者根本不来”吗?

4

3 回答 3

4

你需要?\.

参考帮助页面:

:h pattern-overview
于 2012-07-13T12:05:12.533 回答
2

他们不一样。

这 ?(问号)仅匹配前面的字符 0 或 1 次,例如,colou?r 将同时找到 color(0 次)和 color(1 次)。

*(星号或星号)与前面的字符匹配0 次或多次,例如,tre* 将找到 tree(2 次)、tread(1 次)和 trough(0 次)。

你能告诉我们将被替换的比赛吗?

此外,我知道这种操作是使用该命令完成的,该命令s/foo/bar/g将替换每次出现的foowithbar

于 2012-07-13T12:02:46.470 回答
2

如果你想像这样使用?必须使用 vim 的very magic正则表达式模式 ( \v),但是这也将<和解释>为单词边界,所以现在需要对它们进行转义:

:%s,\v\</?center\>,,g

正如您所发现的,这里较短的选项是转义?

:%s,</\?center>,,g

查看:help /magic更多。

于 2012-07-13T13:21:40.287 回答