=〜演算子の使用法


9

VimScriptの正規表現比較演算子について少し混乱しています。

:h =~?私の理解をよく見ると、=~これは正規表現一致を行うために使用できます(?大文字と小文字を区別しないようにすることで)。

しかし、このコードは "no"を出力します:

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

=~演算子を間違って使用していますか?

回答:


10

2つの問題があります。

  1. あなたは必要とする\+あなたが魔法を使用していないからです。
  2. "代わりに使用しています'\:を二重にエスケープする\\dか、一重引用符を使用する必要があります。

    を参照してください: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*'
    

そう:

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

これは期待どおりに機能します。


ああ、ありがとう。だから、私はこれが私が目指していたものだと思います:if s:myVar =~ '\v^S\d+'
Jonathan.Brink

1
@ Jonathan.Brinkでは、パターンの大文字と小文字を区別しないこともできます'\v\c^S\d+'
muru、2016年

いいね。それを使用する方が好ましいでしょう=~?
Jonathan.Brink

1
@ Jonathan.Brink使用方法によって異なります。パターンを再利用する(変数に保存し、複数の場所などでテストを行う)\c場合、を使用すると大文字と小文字が区別されなくなります。コードの編成に役立ちますが、そうでなければ違いはないと思います。
muru
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.