匹配Vim中未跟随子模式的模式

Ste*_*tew 6 regex vim

假设我有一个包含以下字符串的行的文件:

...cat dog lorem ipsum...
...cat lizard ...
...cat bird ...
...cat dog ...
Run Code Online (Sandbox Code Playgroud)

我想写的是其中线相匹配的正则表达式cat不是其次是dog:

...cat lizard ...
...cat bird ...
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Ste*_*tew 10

通过跟随原子反向匹配原子@!.在这种情况下,我们想要匹配的原子是与字符串匹配的捕获组dog:

/\vcat (dog)@!
Run Code Online (Sandbox Code Playgroud)

细分:

  1. \v激活非常神奇的解析模式
  2. (dog)匹配字符串dog并将其放入捕获组1中
  3. @!反转原子(dog),使得图案匹配时dog不存在

这匹配cat后面没有的实例(和尾随空格)dog.

  • 没有"非常神奇"的模式:`/ cat \(dog \)\ @!` (6认同)
  • @Kent 1.提供一个明确的问题陈述,我找不到Stack Overflow的直接例子,如果有人问到并直接回答,我搜索后找到的答案比我要求的还要长.SO政策明确鼓励这一点.如果你知道要找什么,那么文件很棒.我在这里看,因为我还不知道. (4认同)
  • 我知道如何访问文档本身,但我不确定使用什么语法来查找我正在寻找的内容.我在一个与切线相关的问题中找到了它.如果您认为该文档的示例更清晰,请将其发布或链接到此处供人们查看.如果您认为问题应该被关闭或删除,因为它与SO政策相冲突,那么请关闭或删除它.我不认为在评论中讨论这个问题对那些试图回答问题的人有帮助. (2认同)
  • 即使在其他地方找到答案,这也是SO自我回答问题的完美好习惯.这个特别的Qn为我节省了30分钟,感谢@Stew.通过谷歌搜索SO的答案比阅读vim的帮助要容易得多,也不那么痛苦,特别是当涉及到vim棘手的正则表达式语法时! (2认同)