【问题标题】:vim search wildcard match first occurrencevim 搜索通配符匹配第一次出现
【发布时间】:2011-09-11 04:26:14
【问题描述】:

我有一个文件 <a href="blah.com" rel="blahblah" style="textdecoration:none;">blah</a>

我要匹配rel="blahblah"

但是当我做\rel=".*" 时,它匹配rel="blahblah" style="textdecoration:none;"

我已经尝试过rel=".*\{-\}",但这给出了错误nested \{

【问题讨论】:

    标签: regex search vim


    【解决方案1】:

    我发现 \{-} 的使用令人困惑,所以在这种情况下,我通常会使用 /rel="[^"]*" 之类的东西。

    【讨论】:

      【解决方案2】:

      尝试[^"] 而不是.。后者是“贪婪”的,会匹配尽可能多的字符。

      正则表达式中的[d-r13579] 用于匹配“字符类”:在这种情况下,从dr 范围内的任何小写字母或奇数。如果您以^ 开始课程,那么它的含义就被否定了。

      因此,[^"] 表示除双引号外的字符,"[^"]*" 表示两个双引号之间可包含任意数量的任意字符,但双引号除外。

      【讨论】:

      • 你能扩展一下吗?我试过/rel="[^"],结果刚刚返回rel="b
      • @mazlix 我的意思是/rel="[^"]*"。您需要星号来匹配引号中的所有内容。
      • 哦.. 那么[^"] 到底是做什么的呢?.. 我认为里面的" 代表我正在寻找一个结束" 的事实
      • @mazlix 我在答案中添加了解释。
      【解决方案3】:

      默认情况下,正则表达式匹配器是贪婪的。

        s/rel=".\{-}"/aaaaaaa/
      

      为我工作

      {-} 表示将表达式短路以匹配最短模式。

      【讨论】:

      • 它说找不到模式,如果我转义? :/rel=".*\?" 上面写着Nested \?
      • 抱歉,在我意识到 vi 使用另一种语法之前,我先使用了 perl 语法。我又学到了一些新东西,谢谢
      【解决方案4】:

      你可以使用:

      rel=".\{-}"
      

      \{-} 用于 VIM 中的非贪婪匹配

      【讨论】:

      • 当我不想匹配最长的字符串而是第一个时,这非常有用。谢谢一堆!
      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多