VimScriptの正規表現比較演算子について少し混乱しています。
:h =~?
私の理解をよく見ると、=~
これは正規表現一致を行うために使用できます(?
大文字と小文字を区別しないようにすることで)。
しかし、このコードは "no"を出力します:
let s:myVar = "S123"
if s:myVar =~? "^S\d+"
echo "yes"
else
echo "no"
endif
=~
演算子を間違って使用していますか?
VimScriptの正規表現比較演算子について少し混乱しています。
:h =~?
私の理解をよく見ると、=~
これは正規表現一致を行うために使用できます(?
大文字と小文字を区別しないようにすることで)。
しかし、このコードは "no"を出力します:
let s:myVar = "S123"
if s:myVar =~? "^S\d+"
echo "yes"
else
echo "no"
endif
=~
演算子を間違って使用していますか?
回答:
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
これは期待どおりに機能します。
'\v\c^S\d+'
。
=~?
\c
場合、を使用すると大文字と小文字が区別されなくなります。コードの編成に役立ちますが、そうでなければ違いはないと思います。
if s:myVar =~ '\v^S\d+'