【问题标题】:vim regular expression search and replace on range [a-z]+, etcvim 正则表达式搜索和替换范围 [a-z]+ 等
【发布时间】:2015-05-06 21:59:39
【问题描述】:

我似乎很难找到在 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

关于如何实现这一点的任何建议?

【问题讨论】:

    标签: regex search vim replace


    【解决方案1】:

    是的,试试这个:

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

    解密:

    • s/.../.../g - 全部替换当前行
    • \m - 打开“神奇”正则表达式语法
    • \(...\) - 分组
    • \w\+ - 一个或多个单词字符
    • [^&gt;]* - 零个或多个 not-&gt; 字符(即跳过属性)
    • \zs...\ze - 仅替换这些点之间匹配的内容
    • [^&lt;]\+ - 一个或多个 not-&lt; 字符
    • &lt;\/\1&gt; - 结束标签与开始标签匹配
    • &amp; - \zs\ze 之间匹配的任何内容。

    【讨论】:

      【解决方案2】:

      一个非常简单的解决方案:

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

      但请注意,如果您有包含 &gt;&lt; 的内容(属性、cmets),它将不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 2016-12-01
        相关资源
        最近更新 更多