Vim正则表达式用于匹配字符串

kod*_*nin 5 regex vim

如何为Vim创建一个正则表达式,使其可以匹配一行上的多个双引号字符串,而不匹配两个双引号字符串之间的文本?对模式的限制是,双引号字符串不能包含单引号。到目前为止,我想出了/"\([^']\{-}\)"/匹配以下字符串的方法。但是如您所见,它将与第二行的字符串之间的文本匹配。正如您在第三行中看到的那样,我不能依靠字符串周围的空白。当然,它也需要与第四行一起工作。

  • “猫”被称为“ foo”
  • “猫”的名字是“ foo”
  • x =“猫的食物”
  • x =“猫”

Dan*_*xan 1

我不太确定我明白你在这里需要什么,但是

/\("\([^"]*'[^"]*\)\)\@<!\("\([^"^']*\)"\)
Run Code Online (Sandbox Code Playgroud)

匹配示例中所有带双引号的字符串,但不匹配包含单引号的字符串。

"cat" is called "foo"   => "cat", "foo" highlighted
"cat's" name is "foo"   => "foo" highlighted
x="cat's food"          => nothing highlighted
x = "cat"               => "cat" highlighted
Run Code Online (Sandbox Code Playgroud)

[此处突出显示的意思是:当提示上面的命令时,通过 vim 中的正则表达式搜索找到]

这使用了\@<!vim-regex 语法的构造来进行负向后查找(请参阅此处的 vim 手册)。匹配前面没有引号的双引号和单引号。但是,如果单引号存在于双引号之外,这仍然存在问题。不知道有没有问题,如果有请告诉我。