匹配双引号内的所有单词

时间:2015-04-07 17:50:58

标签: regex vim

我想要一个正则表达式来匹配双引号中的所有单词。

考虑一下:

the quick "brown fox" jumps

应匹配brownfox字样,但不能匹配thequickjumps

以下是我的第一次尝试:

".*\zs\w\+\ze.*"

不幸的是,.*的贪婪会导致正则表达式消耗超出我想要的内容,只有x中的fox匹配。使用\{-}代替*(vim的非贪婪等价物),我们得到修改后的正则表达式:

".\{-}\zs\w\+\ze.*"

但是这只匹配引号中的第一个单词(brown),而不是我想要的所有单词。

我正在尝试做的是用正则表达式完成的吗?

1 个答案:

答案 0 :(得分:5)

使用正向后方\@<=和正向前瞻\@=,您可以获得以下内容:

\("\(\w\+ \)*\)\@<=\w\+\(.*"\)\@=

因此,您要求\("\(\w\+ \)*\)的零宽度匹配,这意味着引号字符后跟0或更多单词后跟空格\(\w\+ \)需要在模式之前匹配。在模式之后,您可以有一系列任意字符.*后跟引号,但这也需要匹配。

有关更多示例,请参阅:h /\@<=:h /\@=。通常可以使用\zs代替\@<=,但在这种情况下,它只匹配最后一个单词。