正規表現スタイルの作り方〜どこよりもわかりやすい正規表現の基礎

InDesignの使い方

Adobe InDesignの正規表現スタイルは、段落内に自動で文字スタイルを埋め込むことのできる便利なスタイル機能です。

InDesignの正規表現の使い方は他の解説サイトにもありますが、超初心者・入門者にはわかりにくい印象を受けます。

そこでこの記事では、InDesignで正規表現を使うことを前提に、正規表現の基礎からInDesignの正規表現スタイルの作成方法を、どこよりも易しくわかりやすく解説します。

正規表現って何?

正規表現は文字列検索の表記法」です。

一般的な文字検索では、検索したい「文字そのもの」を検索画面に打ち込んで文字を探しますが、このときの検索結果は「その文字」だけです。

でも、正規表現を使うと文字の並び方のパターンを使って検索できるので、パターンにマッチした文字を探し出せるのです。

正規表現で検索できる例
  • ( )で囲まれた文字
  • 「円」と「円」の前にある数字(4桁以上は桁カンマ付き)
  • 行の先頭にある「・(中黒)」
  • 「東京都」として使われていない「都」   などなど

InDesignの正規表現スタイルとは

InDesignの正規表現スタイルは、「正規表現のパターン検索によって見つかった文字に、文字スタイルを適用する」という便利なスタイルです。

正規表現スタイルを段落に適用しておけば、文字スタイルは自動で適用されるので、一つ一つの文字ごとに文字スタイルを適用する作業は必要ありません。

一般的なエディタなどでは、正規表現を「検索」のほかに「置換」でも使います。

もちろんInDesignでも、正規表現は「正規表現スタイル」のほかに「検索・置換」で使うことができます。

正規表現スタイルでは、文字置換はできません。特定の文字スタイルを自動適用させるためにのみ、正規表現の検索機能を使っています。

正規表現スタイルの最も簡単な具体例

次に、正規表現スタイルの機能を理解するために、作成例を示します。

文字スタイルを作成

正規表現スタイルを作成するには、必ず文字スタイルが必要です。

でも、正規表現スタイルで使うからといって、特別な文字スタイルが必要なわけではありません。

文字スタイルは、あらかじめ文字スタイルパネルから作成しておいてもいいですし、この次の項で説明する「正規表現スタイルの設定」をする際に、「新規文字スタイル…」のボタンをクリックして作成することもできます。

InDesign:「文字スタイルの編集」ダイアログで、名称「強調」の文字スタイルを作成。(内容:文字カラーをマゼンタ100)
正規表現で使う文字スタイル「強調」を作成
正規表現スタイルで使う文字スタイルは…
  • 文字スタイルパネルから新規作成してもよい
  • 正規表現スタイルの作成時に「新規文字スタイル…」で作成してもよい
  • すでに使っている既存の文字スタイルを使ってもよい

正規表現スタイルの設定

正規表現スタイルは、各段落ごとに作成することもできますが、段落スタイル内に作成するのが一般的な設定方法です。

ここではまず、特定の文字に対して文字スタイルが適用されるように設定してみます。
まだ、正規表現特有の記号は使いません。

InDesign:「段落スタイルの編集」ダイアログ内で「正規表現スタイル」を設定。 テキスト欄に「スタイル」と入力。
段落スタイルパネルで正規表現スタイルを設定

上の例では、段落スタイル「本文」が適用されている段落内の「スタイル」という文字に、文字スタイル「強調」が適用されるように設定しています。

適用後の本文を見ると、「スタイル」という文字に、文字スタイル「強調」が適用されマゼンタになっているのが確認できます。

InDesign:正規表現スタイルが適用された状態。 段落スタイル「本文」が適用されている行の「スタイル」という文字に、文字スタイル「強調」が適用されている。

このように、InDesignの正規表現スタイルというのは、「テキスト:」のボックスに入力された文字(パターン)にマッチした箇所に、文字スタイルが適用されるのです。

文字に、正規表現スタイルによる文字スタイルが適用されているかどうかは、文字スタイルパネルで確認することができます。

本文でマゼンタの文字を選択して、文字スタイルパネルを見ると、パネル下部に「強調」と表示されています。

InDesign:正規表現スタイルによって適用されている文字スタイルは、「文字スタイルパネル」の下部に文字スタイル名が表示されている。
正規表現スタイルによって適用されている文字スタイル名は、文字スタイルパネル下部に表示される

正規表現スタイルは段落パネルから各段落に対して、個別に作成することもできます。

InDesign:段落ことに正規表現スタイルを設定するには、段落パネルの右肩メニューから「正規表現スタイル」を選ぶ。
正規表現スタイルは、段落スタイル内だけでなく、個別の段落にも設定できる
段落パネルから開いた正規表現スタイルのダイアログ
正規表現スタイルのダイアログ

正規表現スタイルは、段落スタイルパネルや文字スタイルパネルのような、正規表現スタイル名を一覧で表示するパネルはありません。

また、段落スタイルパネルの正規表現スタイル設定の際に、作成済みの正規表現スタイルを選択して呼び出すような機能も、今のところありません。(InDesign 2023時点)

正規表現の書き方

さて、ここからは正規表現の書き方についての解説です。

正規表現は「文字検索の表記法」ですから、表記法のルールを覚える必要があります。

ルールはたくさんありますが、一度に覚える必要はありません。
まずは基本的な記号を覚えて、その後はその都度調べながら、必要な表記ルールを1個ずつ覚えていけば良いのです。

メタ文字

正規表現では特定の半角文字に意味を持たせ、その文字を組み合わせることで文字の並びパターンを表現します。

この「特定の意味を持たせた文字」のことを「メタ文字」と言います。

「メタ文字」は全て、半角文字です。
全角文字で入力すると正規表現としてではなく、普通の全角文字として認識されます。

以下に、代表的なメタ文字の一部とその意味を掲げました。
ここでいきなり覚える必要はありません。ふ〜ん…程度に眺めてみてください。

●文字を表す記号

. (ドット) :任意の1文字に一致
\t :タブに一致
\d :数字に一致

●位置を表す記号

^  :段落の先頭に一致
$  :段落の終わりに一致

●繰り返しを表す記号

? :?の直前の文字列が「1個だけあるかもしれないし、ないかもしれない」場合に一致
∗ :∗の直前の文字列が「1個以上あるかもしれないし、ないかもしれない」場合に一致
+ :+の直前の文字列が「1個以上ある」場合に一致

●グループ化関連の記号

( ) : ( )内に検索したい文字列を入れて、グループ化する
|   :上記の( )で囲んでグループ化した各文字列を区切る

●メタ文字を普通の文字として扱う記号

メタ文字そのものを普通の文字として検索するには、その文字の直前にバックスラッシュ(\)を置くことで、普通の文字として扱えるようになります。

\\ :バックスラッシュに一致
\?  :クエスチョンマークに一致

InDesign正規表現スタイル:文字のグループ化

ではさっそく、上で示した正規表現のメタ文字をいくつか使って、正規表現スタイルを作ってみます。

先の例では「スタイル」という文字だけを検索して使いましたが、それを少し加工します。

今回検索するのは、次の文字パターンです。

「段落スタイル」「文字スタイル」「正規表現スタイル」のいずれかの場合

これを正規表現で書くと、次のようになります。

( 段落スタイル | 文字スタイル | 正規表現スタイル )

少し見方を変えると、次のように考えられます。

「段落」または「文字」または「正規表現」のあとに「スタイル」と続く場合

これを正規表現で書いたのが、次です。
「スタイル」という文字がひとつになったことで、冗長性がなくなってすっきりしました。

 ( 段落 | 文字 | 正規表現 ) スタイル

この正規表現を使って、段落」「文字」「正規表現」のあとに「スタイル」が続いている場合を検索します。
それ以外の「スタイル」という文字にはマッチしません。

InDesign:「段落スタイルの編集」ダイアログの正規表現スタイルで、「テキスト」欄に「(段落|文字|正規表現)スタイル」と入力する。

まず「段落」「文字」「正規表現」を「|」で区切って( )で囲みます。
その後に続けて「スタイル」で、正規表現の検索パターンが完成です。

InDesign:「正規表現スタイル」で「(段落|文字|正規表現)スタイル」が適用されている。
「段落スタイル」「文字スタイル」「正規表現スタイル」にだけ、文字スタイル「強調」が適用される

結果を見ると、「文字スタイル」「段落スタイル」「正規表現スタイル」は、文字スタイル「強調」が適用されてマゼンタになっていますが、それ以外の「スタイル」という場合はマゼンタにはなりません。

「|」の意味は、厳密には「または」ではなく、区切られた各文字を先頭から評価して、「そうでなかったらその次」というのが本来の意味ですが、ここではわかりやすく「または」と読み替えています。

InDesign正規表現スタイル:文字の種類

次に、数字に対して「上付き」の文字スタイルを当てるように設定してみます。

検索するのは、次のパターンです。

1桁以上の数字に続いて半角の閉じカッコが1個ある場合。半角閉じカッコはないこともある。

正規表現で数字を表すには、「\d」を使います。
」をつけると、「」の直前の文字が1回以上ある場合にマッチするので、この場合は1桁以上の数字にマッチさせることができます。

半角の閉じカッコは、メタ文字ではなく普通の文字として検索するので「 \) 」のように、バックスラッシュをつけます。

さらに半角閉じカッコは、「1個あるかもしれないけど、ないかもしれない」という場合にもマッチするように「」をつけました。

\d+)?

これで、完成です。

InDesign:正規表現スタイルの設定で「\d+)?」と入力
「+」をつけると、「+」の直前の文字が1個以上ある場合に一致する。
この場合は「数字が1個以上」なので「2桁以上の数字」にも一致する。
InDesign:文中の数字と、数字に続く ) に、文字スタイル「上付き」が適用されて、全て上付きになった。

さて、ここで仕上がりを見ると、行の先頭の数字も上付きになってしまいました。

行頭の数字は箇条書きの番号なので、上付きにはしたくありません。

文中の数字のみに適用されるよう、上記の正規表現を修正することもできますが、ここでは、もうひとつ別の正規表現スタイルを追加して、先頭数字を親文字に戻します。

正規表現スタイルではなく「先頭文字スタイル」も使えますが、ここでは敢えて「正規表現スタイル」を使います。

InDesign正規表現スタイル:文字の位置

正規表現では、文字の位置を特定して検索することができます。

先の設定では、段落の先頭にある数字に上付きの文字スタイルが当たってしまいました。

これを、正規表現の「先頭」というパターンを使って、行の先頭にある数字に文字スタイル「行頭数字」を適用し、文字の大きさを元に戻します。

正規表現では、「 ^ 」 が段落先頭を表します。
数字は「 \d 」です。
最後に「 」をつけることで、1桁以上の数字にマッチさせます。

^\d+

InDesign:正規表現スタイルの設定で「^\d+」と入力.
InDesign:行頭数字に正規表現スタイル「行頭数字」が適用され、上付きが解除された。

文字スタイルの混在適用と適用順序

InDesignの正規表現スタイルを使うと、同一文字に対して複数の文字スタイルを適用することができます。

「混在適用」は、文字スタイルパネルのみからでは実現できません。

文字スタイルを混在適用させる場合には、正規表現スタイルを定義する際の順番に注意が必要です。

今回の例では、まず先に全ての数字に「上付き」の文字スタイルが適用され、そのあとで段落先頭の数字だけ、「文字位置:標準」のスタイルが適用されています。

InDesign:正規表現スタイルの適用は、「上付き」「行頭数字」の順になっている。
全ての数字を上付きにした後に、
段落先頭の数字を太字の親文字にしている。

ためしに、この正規表現スタイルの順番を入れ替えてみます。

正規表現スタイルの項目をクリックで選択した状態で、パネル下部の⬆︎⬇︎ボタンを押すと、順番が入れ替えられます。

InDesign:正規表現スタイルの適用は、「行頭数字」「上付き」の順にすると、思い通りにならない。
段落先頭数字の、文字の位置が「上付き」に上書きされてしまった。

順番を入れ替えると、あとから設定されている「上付き」が適用されて、先頭数字も上付きになってしまいました。

一方で、文字スタイル「行頭数字」の設定には、位置「標準」のほかに、文字サイズ「18Q」・文字の太さ「B(ボールド)」にしていますが、文字のサイズと太さについては、後から適用した「上付き」の文字スタイル内では明示的に設定していないので、先頭数字は、文字スタイル「行頭数字」の「18Q」「B(ボールド)」が生きているわけです。

この関係は、段落スタイルと文字スタイルの関係と同じです。

「段落スタイルの設定項目のうち、変更したい項目は文字スタイル設定で明示的に入力し、段落スタイルの設定をそのまま引き継ぎたい項目は、文字スタイルの設定項目では空欄にしておく」というルールが、正規表現スタイルの文字スタイル適用順序にも当てはまる、というわけです。

正規表現スタイルに文字スタイルを上書きできる!?

正規表現スタイルで適用されている文字スタイルには、さらにその上に、手作業で文字スタイルを適用することができます。

「適用することができます」というより、「適用することができてしまいます」と言うほうが正しいかもしれません。

先の正規表現スタイルで、後から数字の上付き設定をした場合でも、文字スタイルパネルから「行頭数字」の文字スタイルを選んで適用できてしまうのです。

InDesign:正規表現スタイルが適用されている文字に、さらに手作業で、文字スタイルを適用している例。
文字スタイルパネルには「スタイル混在」と表示される。

この場合でも、正規表現スタイルが適用されなくなったわけではないので、文字スタイルパネルの下部の表示は「スタイル混在」となっています。

同一文字に対する文字スタイルの混在適用は、正規表現スタイルにマッチした箇所に、イレギュラーで別の文字スタイルを強制的に適用できるというメリットもありますが、複数人のオペレーターが編集作業をする場合や、多用しすぎた場合には事故のもとにもなり得るというデメリットも理解しておかなければいけません。

こうした混乱を起こさないためにも、正規表現スタイルを使う際には、運用ルールの徹底・周知も必要です。

正規表現スタイルに文字スタイルを上書きできるメリット・デメリット
  • イレギュラー箇所には、手作業で文字スタイルを強制適用できる
  • 多用して複雑になると、作業の煩雑化や、さらには事故のもと

正規表現の最適練習ツールは?

正規表現を覚える一番良い方法は、自分が普段使うツールで練習することです。

なぜなら、正規表現には「方言」と言われる、ツールによる書き方ルールの微妙な違いがあるためです。

特に、InDesignはDTPアプリケーションですから、一般的なテキストエディタとは違うInDesignだけの拡張表現もたくさんあります。

ですから、「InDesignで正規表現を使えるようになりたい」のなら、InDesignで練習してください。

正規表現スタイルならマッチ結果が明快

InDesignで正規表現を勉強する方法として、私がオススメしたいのは、ここで説明してきた「正規表現スタイル」です。

「正規表現スタイル」なら、正規表現が過不足なくマッチしているかどうかを簡単に確認できるので、最良の練習ツールにもなるのです。

練習用の文字スタイルは、文字色を「マゼンタ」にしたり、「上付き」「太字」などの単純な設定にしておくと、適用状況が一目瞭然です。

検索・置換では「正規表現 × 検索オプション」もできる

InDesignには「検索と置換」でも正規表現が使えます。

正規表現は、置換先でも便利なメタ文字が使えるので、積極的に利用したい機能ですが、ひとつ押さえておきたい注意点があります。

InDesignの「検索と置換」のダイアログには、「検索オプション」に「カナを区別」「全角・半角を区別」のボタンがあります。

この「検索オプション」は、正規表現でも使えます。

例えば、「(段落|文字|正規表現)スタイル」という正規表現だけでは、ひらがなや半角にはマッチしませんが、「カナを区別」「全角・半角を区別」をオフにすると、「段落すたいる」にも「段落スタイル」にもマッチするのです。

正規表現検索では、メタ文字を書くことばかりに注意が向きがちですが、「検索オプション」と併用すると、簡単なメタ文字で目的が達成できるかもしれません。

InDesign:「検索と置換」ダイアログの正規表現置換に、「カナを区別」「全角・半角を区別」のオプションを組み合わせている例。
InDesign:「検索と置換」ダイアログの正規表現置換に、「カナを区別」「全角・半角を区別」のオプションを組み合わせて、「カナ・かな」「全角・半角」も区別なく検索できている例。

正規表現を書く上で大切なこと

気づく力

正規表現を書くには、メタ文字を知らなければいけません。

でも、正規表現を書く上で最も大切なことは、たくさんのメタ文字を覚えることではなくて、「検索条件を的確なパターンに落とし込む気づき」です。

例えば、「100-0000」という形式の郵便番号を正規表現で検索したいとき、「3桁数字、ハイフン、4桁数字が順に並んでいるパターン」とだけ考えてしまうと、「03-1234-5678」という電話番号があったなら、後半部分の「234-5678」にもマッチしてしまいます。

これではいけませんから、例えば「『〒』や『郵便番号』という文字に続く」というパターンを入れたり、あるいは「『3桁数字、ハイフン、4桁数字』の並びの前は数字ではない」とする必要があるかもしれません。

正規表現は、目的の文字のみに的確にマッチする条件を導き出せたあとで、メタ文字を調べて書き上げれば良いのです。

正規表現一覧の利用

InDesignで使える正規表現は、市川せうぞーさんの正規表現一覧が参考になります。
対応バージョンはCS3なので少し古いですが、InDesignだけの拡張機能のメタ文字も載っています。

まずはこの正規表現一覧の、各メタ文字に対する「意味」の欄をサラッと読んで、「正規表現ってこんなことを検索できるんだ!」という知識を頭の隅に入れてみてください。

「正規表現でどんな検索ができるのか」を知っておくことは、より良い検索パターンに気づくための大きな助けになります

簡潔にわかりやすく表現する力

その次の段階で大切なことは、「気づいたパターンをできるだけ簡潔に表現する力」です。

メタ文字は複雑にならざるを得ない場合も多くありますが、複雑なパターンは、後で解読するのが大変です。

さらに、複雑になるとバグが潜む可能性も高まります。

複雑なパターンを解読して、バグを解消する作業を想像してみて下さい。
自分が書いた正規表現でさえ、複雑なパターンは後から解読するのは大変ですから…

小さく区切って実行する

正規表現スタイルを使ったメタ文字の表記法の練習に慣れてきたら、普段の「検索・置換」で使う機会も増えると思います。

「簡潔にわかりやすく書きましょう」といっても、そもそも正規表現は可読性が低いですし、簡潔に書いても思わぬバグが潜むことがあります。

検索するだけなら被害は小さく済むかもしれませんが、大幅な一括置換の保存後に間違いに気づいて後戻りできなくなることだけは避けねばなりません。

そのリスク回避のために、最低でもオススメしたいのは次の2つです。
「オススメ」というか、「常識」です。

大量の一括置換後の事故防止のためにやっておきたいこと
  • 置換前にバックアップをとる
  • 段階的に分けて置換する

これは、正規表現を使った場合だけに当てはまることではありませんが、正規表現を使うと、間違った置換に気づきにくいことも少なくないので、より慎重になる必要があります。

バックアップはどんな場合でも最大の保険となり得ますが、置換要素を数回に分けて実行するという方法も併用すると、どの時点の正規表現が間違っていたのかが特定しやすくなります。

というわけで、正規表現を使った大幅な置換は、慎重に保険をかけながら実行することをオススメします。

コメント

タイトルとURLをコピーしました