kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。 Ubuntuの最新情報も紹介しています。

正規表現プレースホルダー

  「正規表現プレースホルダー」は、スニペット挿入時に他の「プレースホルダー」の内容から正規表現を利用して文字列を抽出し、その文字列をドキュメントに展開する「プレースホルダー」です。


  注意(2014/8/10)

     「正規表現プレースホルダー」はバグのため動作しません。

正規表現プレースホルダーのフォーマット

  「正規表現プレースホルダー」のフォーマットは、以下のようになります。

${プレースホルダーの番号/正規表現/文字列の抽出方法}

  プレースホルダーの番号

    「正規表現プレースホルダー」は他の「プレースホルダー」の内容を参照するため、参照先の「プレースホルダー」の番号を指定します。

  正規表現

    文字列を抽出する正規表現を記述します。
    「正規表現プレースホルダー」の正規表現は、Pythonの「re」モジュールを使用して文字列の抽出を行います。

    ここで記述された正規表現は、「re.compile()」に渡されます。

    正規表現の記述方法については、「6.2. re — 正規表現操作」を参考にしてください。

文字列の抽出方法

  正規表現により文字列の検索を行った時点では、「Match」オブジェクトが生成(取得)されている状態です。

  この「Match」オブジェクトに対してどのような操作を行うのかを、「文字列の抽出方法」で指定します。

  文字列の抽出方法には、以下の3種類があります。

  1. グループ番号を指定する
  2. グループ名を指定する
  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>}

スニペットの使用例

  ドキュメントに上記のスニペットを挿入すると、以下のようになります。

  1.タブの入力

    スニペットを挿入するため、上記のスニペットに設定してある「タブ」を入力します。


  2.スニペットの挿入

    「Tab」キーを押すと、以下のようにスニペットの内容がドキュメントに展開されます。

    番号が設定された「正規表現プレースホルダー」は、実線の枠で表示されます。
    番号が設定されていない「正規表現プレースホルダー」は、点線の枠で表示されます。


    すべての「プレースホルダー」の中で最も番号の小さい「${1:Ubuntu,Kubuntu,Xubuntu,Lubuntu} 」に、フォーカスが設定されています。

  3.${1:Ubuntu,Kubuntu,Xubuntu,Lubuntu}の編集

    「${1:Ubuntu,Kubuntu,Xubuntu,Lubuntu}」を必要に応じて編集します。


  4.正規表現プレースホルダーの更新

    「${1:Ubuntu,Kubuntu,Xubuntu,Lubuntu}」を参照しているすべての「正規表現プレースホルダー」が更新されます。



関連コンテンツ
同一カテゴリーの記事
コメント
オプション