regex - 在 Vim 中匹配单引号或双引号字符串

原文 标签 regex vim

我很难将单引号或双引号字符串与 Vim 的字符串匹配
正则表达式引擎。

问题是我将正则表达式分配给一个变量,然后使用它
一起玩matchlist .

例如,假设我知道我所在的行中包含一个带引号的字符串并且我想匹配它:

let regex = '\v"(.*)"'

这将适用于匹配任何双引号的内容。同样,这将匹配单引号字符串:
let regex = "\v'(.*)'"

但是如果我尝试同时使用它们,例如:
let regex = '\v['|"](.*)['|"]'

或者
let regex = '\v[\'|\"](.*)[\'|\"]'

然后 Vim 不知道如何处理它,因为它认为在实际的变量定义中没有关闭某些引号,从而弄乱了正则表达式。

使用正则表达式捕获单引号或双引号字符串的最佳方法是什么?

也许(可能!)我错过了一些非常简单的东西,以便能够使用两个引号而不用担心实际正则表达式的周围引号。

请注意,我更喜欢正则表达式的单引号,因为这样我不需要双反斜杠进行转义。

最佳答案

您需要使用反向引用。像这样:

let regex = '\([''"]\)\(.\{-}\)\1'

或者非常神奇
let regex = '\v([''"])(.{-})\1'

或者,您可以使用(因为它不会干扰您的子匹配):
let regex = '\%("\([^"]*\)"\|''\([^'']*\)''\)'

或者非常神奇:
let regex = '\v%("([^"]*)"|''([^'']*)'')'

关于regex - 在 Vim 中匹配单引号或双引号字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5950442/

相关文章:

sorting - 如何在 Vim 中根据标题对段落进行排序?

r - 如何提取所有内容,直到第一次出现模式

java - 正则表达式模式匹配器

c# - 根据键值提取另一个方括号内方括号内的值

vim - 我的 mvim 中的 git diff

vim:获取卸载缓冲区的缓冲区编号

java - Java正则表达式替换原始字符串中的组值

c - 从xml响应中提取网址

unix - vi (vim) 读取 ~/.exrc 以外的 exrc 文件

vim - 在 vim/vi 中添加自定义键映射的最佳方法是什么? (是否存在用于自定义的未绑定(bind)键空间?)