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/

相关文章:

vim - 使命令仅适用于选定的文件类型

c# - Asp.Net core 3.0 中的 URL 重写

java - 区分字符串和 flex

regex - Apache Spark以正则表达式读取文件

用于 Ultisnips+Deoplete 兼容性的 vimscript

vim - jedi-vim 在跳转到 goto 分配/定义后返回到旧位置

ruby - vim:如何排列 ruby​​ 选项?

unix - Vim 在由 Expect 生成的 ssh session 中行为不正常

ruby - 用 gsub 替换为大写字符

javascript - 使用正则表达式转义单词开头和冒号之间的特殊字符