Coincidencia de cadenas entre comillas simples o dobles en Vim

Estoy teniendo dificultades para tratar de hacer coincidir cadenas de comillas simples o dobles con el motor de expresión regular de Vim.

El problema es que estoy asignando la expresión regular a una variable y luego la uso para jugar con matchlist.

Por ejemplo, supongamos que sé que estoy en una línea que contiene una cadena entre comillas y quiero hacerla coincidir:

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

Eso funcionaría para coincidir con cualquier cosa que esté entre comillas dobles. De manera similar, esto coincidiría con cadenas entre comillas simples:

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

Pero si trato de usarlos a ambos, como:

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

or

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

Entonces Vim no sabe cómo lidiar con eso porque piensa que algunas comillas no se cierran en la definición de variable real y estropea la expresión regular.

¿Cuál sería la mejor manera de capturar cadenas entre comillas simples o dobles con una expresión regular?

Tal vez (¡probablemente!) Me esté perdiendo algo realmente simple para poder usar ambas comillas y no preocuparme por las comillas circundantes para la expresión regular real.

Tenga en cuenta que prefiero las comillas simples para las expresiones regulares porque de esa manera no necesito hacer doble barra invertida para escapar.

preguntado el 10 de mayo de 11 a las 13:05

Dentro de una sola cadena entre comillas, dos comillas simples ('') representan una comilla simple ('). -

3 Respuestas

Necesita utilizar referencias posteriores. Al igual que:

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

O con mucha magia

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

Alternativamente, puede usar (ya que no interferirá con sus sub-coincidencias):

let regex = '\%("\([^"]*\)"\|''\([^'']*\)''\)'

o con mucha magia:

let regex = '\v%("([^"]*)"|''([^'']*)'')'

contestado el 11 de mayo de 11 a las 17:05

Uno debe usar no codicioso \{-} calificador en lugar de * no coincidir 'quoted' not 'quoted' como un solo literal citado. Entonces yo usaría let r = '\([''"]\).\{-}\1'. - ib.

@ib ¡Estoy de acuerdo! Gracias por la linda sugerencia. He cambiado mi publicación en consecuencia. - Peter Rincker

Su respuesta ahora tiene un error: debe usar * or {-}, no ambos. La primera línea de código debe ser let regex = '\([''"]\)\(.\{-}\)\1' y el segundo let regex = '\v([''"])(.{-})\1' - ib.

mira esta publicación

¿Reemplazar las comillas alrededor de las cadenas en Vim?

podría ayudar de alguna manera

contestado el 23 de mayo de 17 a las 15:05

Este es un script viable que escribo para la sintaxis de las cadenas entre comillas.

syntax region myString start=/\v"/ skip=/\v(\\[\\"]){-1}/ end=/\v"/
syntax region myString start=/\v'/ end=/\v'/

Puedes utilizar \v(\\[\\"]){-1} saltar algo.

respondido 20 nov., 11:09

-1: no estaba intentando usarlo en un archivo de sintaxis (y también la pregunta ha sido respondida satisfactoriamente). - Chris Morgan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.