如何为Vim创建一个正则表达式,使其可以匹配一行上的多个双引号字符串,而不匹配两个双引号字符串之间的文本?对模式的限制是,双引号字符串不能包含单引号。到目前为止,我想出了/"\([^']\{-}\)"/
匹配以下字符串的方法。但是如您所见,它将与第二行的字符串之间的文本匹配。正如您在第三行中看到的那样,我不能依靠字符串周围的空白。当然,它也需要与第四行一起工作。
我不太确定我明白你在这里需要什么,但是
/\("\([^"]*'[^"]*\)\)\@<!\("\([^"^']*\)"\)
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 手册)。匹配前面没有引号的双引号和单引号。但是,如果单引号存在于双引号之外,这仍然存在问题。不知道有没有问题,如果有请告诉我。