睡人亭

秀丸エディタの正規表現

タグ付き正規表現

タグ付き正規表現

タグ付き正規表現は置換で使います。

正規表現にタグと呼ばれる特殊な記号(メタ文字)を埋め込み、検索時に指定した正規表現のパターンを保持したまま、順番を入れ替えたりする場合に使用します。。

このタグどの部分を取り出すか?という範囲を指定するために使われます。

タグ付き正規表現を使いこなすためには、文章の構造を正規表現を用いて抽象的に表記する事が必要になります。

文章を正規表現を用いて抽象的に表記する

以下の事例で実際にやってみましょう。

置換前
置換前

この二行は、いずれも一行毎に詠み手水平tabの構造を持っています。

この構造を、タグ付き正規表現を利用して改行詠み手に変えてみましょう。

  1. この文章は上に書いたとおり、一行が詠み手水平tabの構造を持ちます。
  2. とりあえず、詠み手の間に水平tabを表す¥tが入るのはわかるかと思います(わからなければ、エスケープシーケンス正規表現のページを読み直してください)。
  3. 次に詠み手の部分に注目しましょう。これも以下の構造として抽象的に表記可能です。
    • 詠み手漢字
    • ひらがな+全角空白
  4. 上記の抽象的表現から、それぞれ詠み手[亜-熙]+[ぁ-ん ]+と表現してもよいのですが、これをもっと単純な表記にしてみましょう。
  5. 両方とも一文字以上の文字列で構成されていますので、正規表現としては .+にまとめる事が出来ます。
  6. 結果、詠み手水平tabを正規表現で抽象化して表記した結果、.+¥t.+と表記する事ができます。
  7. 試しに、これをキーワードとして指定してに置換すると、一行ごとにが一つある文書に変換されるはずです。
  8. 正規表現で抽象化して表記が正しいものと判断したら、これに文書の範囲を示すタグを付け加えましょう。
  9. タグは検索時に使うもの置換時に使うものとの二つに分かれます。ここでは、便宜的に前者を検索用タグ、後者を置換用タグと呼ぶ事にします。
  10. 検索用タグは、¥fと表記し、検索キーワードを切り分けるために使われます(上記の例では、詠み手水平tabの合計三つの範囲に切り分けられるはずです)。
  11. ¥fは、範囲を区切る部分に挿入します(上記の例では、詠み手水平tabと切り分けた部分の間に挿入します)。
  12. 従って、正規表現としては、.+¥f¥t¥f.+となります。
  13. 置換用タグは置換キーワードで、切り分けた部品を再配置する際に使われます。
  14. 置換用タグの書式は¥+半角数字になります。
  15. 半角数字を使って、¥fで切り分けた範囲を先頭から順に¥0¥1¥2¥3…と表記します。
  16. 上の場合は、一番左(詠み手)の.+¥0¥t¥1、一番右(歌)の.+¥2となります。番号の数え方が慣れるまで面倒ですが、色々試してみて覚えてください。
  17. ここでは、(改行)詠み手に置換しますので、置換キーワードには¥2¥n¥0と指定します。
  18. 以上の設定が済んだら全置換を実行すると、以下のようになります。
    置換後
    置換後

利用例

句読点及び直前の一文字を別行に切り出してみましょう。

元の文章

切り出し前のテキスト
切り出し前のテキスト
検索キーワード
.[、。]¥f">

正規表現の解説

.
任意の1文字
[、。]
どちらか1文字
¥f
ここまでを一範囲として指定します(この範囲が置換キーワードの¥0となります)。
置換キーワード
¥n¥0¥n
¥n
改行
構造
改行¥0改行
ここでの¥0は、句読点及び直前の一文字即ち.[、。]¥fを指します。

置換後

上記の指定で置換した結果です。

切り出し後のテキスト
切り出し後のテキスト

注意事項

検索用タグをブラケット(角括弧)やパーレン(丸括弧)の中で使うと、文字を切り分ける位置を判断できません。そのため、括弧の中では使わないようにしましょう。同様に、検索用タグの切り分け位置が曖昧になるような正規表現の中で利用しても、上手く切り分けられません。

また、検索用タグの後ろに*?のような、直前の文字列を判断するメタ文字を使用する事はできません。

秀丸では、切り分ける位置の判断に失敗した場合、置換用タグには何も代入されませんので、結果的に何もない状態(文字列が削除される)になります。