Viの正規表現:グループ内で文字クラスを使用する方法 (たとえば[\ s \ w])


15

Vimでは、文字クラスは\s任意の空白文字に一致します。私はグループでこれらの特殊文字を使用している場合は、たとえば[\s\w]それは、任意の単一の空白文字または単語文字に一致しない、それが一致しませんsw

グループ内で文字クラスを使用する方法は?


8
正規表現エンジンの一部の実装とは異なり、Vimはその表記をサポートしていないようです。ただし[[:space:][:alnum:]_]\sとのコレクションを近似するために使用できます\w
ピーターレウェリン

@PeterLewerin回答として投稿してください。
クリストファーボトムズ

@ChristopherBottoms:完了。
ピーターレウェリン

回答:


11

これはグループではなく、範囲であり、Vimでは文字クラスを使用できません(ただし、Pythonなどの他の正規表現の実装では可能です)。代わりに代替を使用する必要があります。

/\(\w\|\s\)

または:

/\v(\s|\w)

(または、Peter Lewerinによって提案されたソリューション)。


2
文字クラスに無効な範囲を構築できるから\sといって、文字クラスのようなものを使用できないようにする必要はありません。Vimの正規表現の実装はたまたまその選択を行っていますが、他の実装ではを使用できます[\s]
ジェームスサン

@VanLaserこの情報を使用して回答を編集する場合([\ s]は他の正規表現実装では可能ですが、vimではそうではありません)、回答を受け入れます。
ジョンHK

(大丈夫、追加)
VanLaser

11

正規表現エンジンの一部の実装とは異なり、Vim [\s\w]はコレクション内のその表記()をサポートしていないようです。ただし、POSIX文字クラス式を使用できます。

  • [:blank:]はと同じ\sです。
  • [:space:]は、一致するよりも多くの空白文字に一致\sし、と同等のよう\_sです。
  • [:alnum:]おおよそ \wですが、アンダースコア(_)とは一致しません。

したがって、あなたが望んでいたコレクションは、[[:blank:][:alnum:]_]またはと書くことができます[[:space:][:alnum:]_]

私がテストして、これを確認していないが、それはで文書化されて:h regexp:h /character-classes:h /collection

移植性に関する注意:他の正規表現エンジンで\sは、通常Vim と同じ[:space:](または\_s)です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.