Uso del operador = ~


9

Estoy un poco confundido con los operadores de comparación de expresiones regulares de VimScript.

Si miro a través de :h =~?mi comprensión, es que =~se puede usar para hacer una coincidencia de expresiones regulares (con la ?diferencia entre mayúsculas y minúsculas).

Pero este código imprime "no":

let s:myVar = "S123"
if s:myVar =~? "^S\d+"
  echo "yes"
else
  echo "no"
endif

¿Estoy usando el =~operador incorrectamente?

Respuestas:


10

Hay dos problemas:

  1. Necesitas \+ya que no estás usando magia.
  2. Estás usando en "lugar de '. Necesitas doble escape \: \\do usar comillas simples.

    Ver :h literal-string:

    literal-string                                          literal-string E115
    ---------------
    'string'                string constant                 expr-'
    
    Note that single quotes are used.
    
    This string is taken as it is.  No backslashes are removed or have a special
    meaning.  The only exception is that two quotes stand for one quote.
    
    Single quoted strings are useful for patterns, so that backslashes do not need
    to be doubled.  These two commands are equivalent: 
            if a =~ "\\s*"
            if a =~ '\s*'
    

Entonces:

let s:myVar = "S123"
if s:myVar =~? '^S\d\+'
  echo "yes"
else
  echo "no"
endif

Esto funciona como se esperaba.


Ah gracias. Entonces, creo que esto es lo que estaba buscando:if s:myVar =~ '\v^S\d+'
Jonathan.Brink

1
@ Jonathan.Brink también se puede virar en caso de falta de sensibilidad al patrón: '\v\c^S\d+'.
muru

bonito. ¿Sería preferible usarlo=~?
Jonathan.Brink

1
@ Jonathan.Brink Depende de cómo pretendas usarlo. Si tiene la intención de reutilizar el patrón (manténgalo en una variable y realice pruebas en varios lugares o algo así), el uso \ccentralizará la insensibilidad a mayúsculas y minúsculas. Útil para la organización del código, de lo contrario no creo que haya una diferencia.
muru
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.