Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何转到Vim搜索模式的最后一个匹配_Regex_Vim - Fatal编程技术网

Regex 如何转到Vim搜索模式的最后一个匹配

Regex 如何转到Vim搜索模式的最后一个匹配,regex,vim,Regex,Vim,在一行中,Vim如何仅匹配搜索模式的最后一次出现?有点像不贪婪,但从一开始 e、 g.在下一行中,我想匹配闪烁小星星(以粗体突出显示): 闪烁一闪一闪一闪一闪一闪一闪一闪的小星星 我尝试了如下所示的负前瞻,但它与整行匹配: Twinkle.*\(Twinkle\)\@!$ 转义括号并在锚之前添加通配符匹配: Twinkle\(.*Twinkle\)\@!.*$ ^ ^ ^^ “*”贪婪地匹配所有内容,在匹配失败时回溯较少的内容(可能什么都没有) “\z

在一行中,Vim如何仅匹配搜索模式的最后一次出现?有点像不贪婪,但从一开始

e、 g.在下一行中,我想匹配
闪烁小星星
(以粗体突出显示):

闪烁一闪一闪一闪一闪一闪一闪一闪的小星星

我尝试了如下所示的负前瞻,但它与整行匹配:

Twinkle.*\(Twinkle\)\@!$

转义括号并在锚之前添加通配符匹配:

Twinkle\(.*Twinkle\)\@!.*$
       ^          ^    ^^
  • “*”贪婪地匹配所有内容,在匹配失败时回溯较少的内容(可能什么都没有)
  • “\zs”设置“匹配开始”,用于替换和光标放置
  • 剩下的就是你想要匹配的
使用“:set incsearch”,将一些文本加载到缓冲区,然后开始键入模式以查看其应用情况

例如,缓冲区:

Twinkle brightly little star
Twinkle brightly, Twinkle brightly little star
和替代:

:%s/\v.*\zsTwinkle /&extra /
给出:

Twinkle extra brightly little star
Twinkle brightly, Twinkle extra brightly little star

所以要搜索从闪烁的最后一次出现到行尾之间的所有内容吗?从您提供的示例很难判断。是的,我想匹配从闪烁的最后一次出现到行的末尾。阿公87给出了正确的答案。谢谢不,那也不行。Vim仍然匹配整行。哎呀,把第一个通配符字符串放在括号内。已编辑。较短的版本:
/\v(闪烁)(.*\1@*
Twinkle extra brightly little star
Twinkle brightly, Twinkle extra brightly little star