【问题标题】:Word boundary search and exclamation mark at end of word单词边界搜索和单词末尾的感叹号
【发布时间】:2014-12-11 14:43:38
【问题描述】:

我不知道如何使用边界搜索末尾带有感叹号的单词。

p.e. 文字:

Do this!

搜索:

/\<this!\>

这与文本中的 this! 不匹配。 这要么:

/\<this\!\>

我想 VIM 认为它必须是 Lookahead/Lookbehind 零长度断言。
我该如何解决这个问题?

【问题讨论】:

  • ! 不是单词的一部分,因此\&gt;! 之后但之前不会匹配。
  • @Tensibai,这只是一个例子。结尾有很多!的词,我想匹配其中的一些。
  • @Remonn 是的。抱歉,评论太快了。

标签: regex vim match boundary


【解决方案1】:

! 不是关键字字符(至少在您的情况下),因此关键字到非关键字边界(\&gt; 是)的正则表达式断言不会在它之后匹配。 做什么是这样的

/\<this\>!/

但在这里,\&gt; 是多余的,因为 s 显然是关键字字符,而 ! 不是。所以,只在实际需要的地方使用断言(如示例开头的\&lt;,以避免匹配foothis!),一切都很好。

或者,如果出于您的目的,! 属于一个词,并且您想匹配它,请通过

:setlocal iskeyword+=!

并使用\k 在单词内部进行匹配,例如\&lt;\k\{5}\&gt; 查找所有 5 个字母(关键字)的单词。

【讨论】:

    【解决方案2】:

    试试这个(或将\w 替换为您的单词所包含的字符类):

    /\<\w\+\!
    

    ! 不是单词的一部分,因此任何像 \&gt; 这样的单词边界匹配都将匹配之前,而不是之后。

    【讨论】:

    • 不明白为什么它不是单词的一部分。有没有办法将它包含在边界内?
    • @Remonn:你需要明白,单词边界是字符类\w中的一个字符与另一个不是该类成员的字符之间的位置(或字符串)。
    猜你喜欢
    • 2016-05-08
    • 2011-02-25
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多