正規表現プレースホルダー
「正規表現プレースホルダー」は、スニペット挿入時に他の「プレースホルダー」の内容から正規表現を利用して文字列を抽出し、その文字列をドキュメントに展開する「プレースホルダー」です。注意(2014/8/10)
「正規表現プレースホルダー」はバグのため動作しません。正規表現プレースホルダーのフォーマット
「正規表現プレースホルダー」のフォーマットは、以下のようになります。
${プレースホルダーの番号/正規表現/文字列の抽出方法}
プレースホルダーの番号
「正規表現プレースホルダー」は他の「プレースホルダー」の内容を参照するため、参照先の「プレースホルダー」の番号を指定します。正規表現
文字列を抽出する正規表現を記述します。「正規表現プレースホルダー」の正規表現は、Pythonの「re」モジュールを使用して文字列の抽出を行います。
ここで記述された正規表現は、「re.compile()」に渡されます。
正規表現の記述方法については、「6.2. re — 正規表現操作」を参考にしてください。
文字列の抽出方法
正規表現により文字列の検索を行った時点では、「Match」オブジェクトが生成(取得)されている状態です。この「Match」オブジェクトに対してどのような操作を行うのかを、「文字列の抽出方法」で指定します。
文字列の抽出方法には、以下の3種類があります。
- グループ番号を指定する
- グループ名を指定する
- 検索結果により文字列を指定する
1.グループ番号を指定する
グループ番号(match.group())を指定して検索結果から文字列を抽出します。グループ番号の指定は以下のように記述します。
\番号
例えばグループ番号「0」を指定する場合、以下のように記述します。
${1/ubuntu/\0}
以下のように複数のグループ番号を指定することもできます。
${1/ubuntu/\0\2}
グループ番号「0」について
グループ番号「0」を指定すると、正規表現にマッチしたすべての文字列が抽出されます。正規表現にグループを指定しなかった場合は、グループ番号「0」を指定します。
2.グループ名を指定する
グループ名(match.group())を指定して検索結果から文字列を抽出します。グループ名の指定は以下のように記述します。
\<グループ名>
例えばグループ名「Head」を指定する場合、以下のように記述します。
${1/(?P<Head>.)(?P<Tail>ubuntu)/\<Head>}
以下のように複数のグループ名を指定することもできます。
${1/(?P<Head>.)(?P<Tail>ubuntu)/\<Head>\<Tail>}
3.検索結果により文字列を指定する
正規表現による検索結果から、どのような文字列を返すのかを指定します。検索結果とは、記述した正規表現にマッチする文字列が見つかったかどうかです。
以下のように記述します。
(?グループの情報,文字列が見つかった場合,文字列が見つからなかった場合)
グループの情報は、「グループ番号」か「グループ」名で指定します。
グループ番号「0」の文字列が見つかった時に「Found」文字列を返し、見つからなかった時に「Not found」文字列を返す場合、以下のように記述します。
${1/(.)(ubuntu)/(?0,Found,Not Found)}
グループ名「Head」の文字列が見つかった時に「Found」文字列を返し、見つからなかった時に「Not found」文字列を返す場合、以下のように記述します。
${1/(?P<Head>.)(?P<Tail>ubuntu)/(?<Head>,Found,Not found)}
グループ番号「1」の文字列が見つかった時にグループ番号「2」の文字列を返し、見つからなかった時にグループ番号「3」の文字列を返す場合、以下のように記述します。
${1/(.)(ubuntu)(,)/(?1,\2,\3)}
グループ名「Head」の文字列が見つかった時にグループ名「Middle」の文字列を返し、見つからなかった時に「Tail」の文字列を返す場合、以下のように記述します。
${1/(?P<Head>.)(?P<Middle>ubuntu)(?P<Tail>,)/(?<Head>,\<Middle>,\<Tail>)}
正規表現プレースホルダーに番号を指定するには
「正規表現プレースホルダー」に番号を設定することができます。「シンプルプレースホルダー」と異なり、番号を設定してもユーザーが「Tab」キーで「正規表現プレースホルダー」に移動することはできませんが、「ミラープレースホルダー」等ほかの「プレースホルダー」から「正規表現プレースホルダー」の内容を参照できるようになります。
番号は以下のように設定します。
${番号:プレースホルダーの番号/正規表現/文字列の抽出方法}
番号について
番号の扱いについては、「シンプルプレースホルダー」を参考にしてください。正規表現のオプションを指定するには
正規表現のオプションを指定することができます。正規表現のオプションは、「re.compile(pattern, flags)」の「flags」に相当します。
正規表現のオプションの指定方法
正規表現のオプションの指定方法です。以下のように記述します。
${プレースホルダーの番号/正規表現/文字列の抽出方法/正規表現のオプション}
正規表現のオプション一覧
指定できる正規表現のオプションは以下の通りです。指定する値 | 相当するreのフラグ | 意味 |
---|---|---|
I | re.I | 大文字小文字を区別しない |
L | re.L | 特定の文字のみロケールに従ったマッチングを行う(推奨されない) |
M | re.M | 「^」と「$」が改行を配慮したマッチングになる |
S | re.S | 「.」が改行にもマッチするようになる |
X | re.X | 正規表現の記述方法を変える |
正規表現のオプションの記述例
正規表現のオプションの記述例です。以下のように記述します。
${1/ubuntu/\0/I}
以下のように複数のオプションを指定することもできます。
${1/ubuntu/\0/IMS}
スニペットの記述例
スニペットの記述例です。
OS:${1:Ubuntu,Kubuntu,Xubuntu,Lubuntu}
ubuntu/\0:${1/ubuntu/\0}
ubuntu/\0/I:${1/ubuntu/\0/I}
.ubuntu/\0:${1/.ubuntu/\0}
(.)(ubuntu)/\0:${1/(.)(ubuntu)/\0}
(.)(ubuntu)/\1:${1/(.)(ubuntu)/\1}
(.)(ubuntu)/\2:${1/(.)(ubuntu)/\2}
(?P<Head>.)(?P<Tail>ubuntu)/\<Head>:${1/(?P<Head>.)(?P<Tail>ubuntu)/\<Head>}
(?P<Head>.)(?P<Tail>ubuntu)/\<Tail>:${1/(?P<Head>.)(?P<Tail>ubuntu)/\<Tail>}
ubuntu/\0:${1/ubuntu/\0}
ubuntu/\0/I:${1/ubuntu/\0/I}
.ubuntu/\0:${1/.ubuntu/\0}
(.)(ubuntu)/\0:${1/(.)(ubuntu)/\0}
(.)(ubuntu)/\1:${1/(.)(ubuntu)/\1}
(.)(ubuntu)/\2:${1/(.)(ubuntu)/\2}
(?P<Head>.)(?P<Tail>ubuntu)/\<Head>:${1/(?P<Head>.)(?P<Tail>ubuntu)/\<Head>}
(?P<Head>.)(?P<Tail>ubuntu)/\<Tail>:${1/(?P<Head>.)(?P<Tail>ubuntu)/\<Tail>}
スニペットの使用例
ドキュメントに上記のスニペットを挿入すると、以下のようになります。1.タブの入力
スニペットを挿入するため、上記のスニペットに設定してある「タブ」を入力します。2.スニペットの挿入
「Tab」キーを押すと、以下のようにスニペットの内容がドキュメントに展開されます。番号が設定された「正規表現プレースホルダー」は、実線の枠で表示されます。
番号が設定されていない「正規表現プレースホルダー」は、点線の枠で表示されます。
すべての「プレースホルダー」の中で最も番号の小さい「${1:Ubuntu,Kubuntu,Xubuntu,Lubuntu} 」に、フォーカスが設定されています。