vim正则表达式搜索并替换范围[a-z] +等

时间:2015-05-06 21:59:39

标签: regex search vim replace

我似乎无法在vim中找到更换像[A-Za-z0-9]这样的范围的资源。

这是我的例子......

搜索:

<h4>Text in Markup</h4>

更换后:

<h4><%= _t('Text in Markup') %></h4>

我正在尝试在Vim 7.4中执行以下操作

:s/>([a-zA-Z\s]+)</><%= _t('$1') %></g

有关如何实现这一目标的任何建议吗?

2 个答案:

答案 0 :(得分:1)

是的,试试这个:

:s/\m<\(\w\+\)[^>]*>\zs[^<]\+\ze<\/\1>/<%= _t('&') %>/g

解密:

  • s/.../.../g - 替换所有当前行
  • \m - 启用“魔术”正则表达式语法
  • \(...\) - 分组
  • \w\+ - 一个或多个单词字符
  • [^>]* - 零个或多个不 - >个字符(即跳过属性)
  • \zs...\ze - 仅替换这些点之间匹配的内容
  • [^<]\+ - 一个或多个不是 - <字符
  • <\/\1> - 结束标记与开头的匹配
  • & - \zs\ze之间匹配的内容。

答案 1 :(得分:0)

非常简单的解决方案:

:s/>\([^<]\+\)/><%= _t('\1') %></g

但请注意,如果您拥有包含><的内容(属性,评论),则无效。