Utilizzo dell'operatore = ~


9

Sono un po 'confuso sugli operatori di confronto regex di VimScript.

Se guardo attraverso la :h =~?mia comprensione è che =~può essere usato per fare una corrispondenza regex ( ?rendendolo insensibile al maiuscolo / minuscolo).

Ma questo codice stampa "no":

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

Sto usando l' =~operatore in modo errato?

Risposte:


10

Ci sono due problemi:

  1. È necessario \+poiché non stai usando la magia.
  2. Stai usando "invece di '. È necessario raddoppiare escape \: \\doppure utilizzare virgolette singole.

    Vedi :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*'
    

Così:

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

Funziona come previsto.


Ah grazie. Quindi, penso che questo sia quello che stavo cercando dopo:if s:myVar =~ '\v^S\d+'
Jonathan. Il

1
@ Jonathan.Brink si può anche virare sul caso insensibilità al modello: '\v\c^S\d+'.
Muru,

simpatico. Sarebbe preferibile usare=~?
Jonathan.

1
@ Jonathan.Brink Dipende da come intendi utilizzarlo. Se si intende riutilizzare il modello (tenerlo in una variabile ed eseguire test in più punti o qualcosa del genere), l'utilizzo \ccentralizzerà l'insensibilità al maiuscolo / minuscolo. Utile per l'organizzazione del codice, altrimenti non penso che ci sia differenza.
Muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.