我很难将单引号或双引号字符串与 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/