大量の範囲を指定する
ブラケットで囲んだ文字列は、あくまでも"いずれかのひとつ"にマッチすると言っても、大量に記述するのは骨が折れることでしょう。そこで活用して頂きたいのが、前後にある文字列範囲を指定するメタ文字「-(マイナス)」です。
たとえば半角数字を検索する場合、「[0123456789]」と書いても間違いではありませんが、全数字を記述するのは面倒なだけではなく、マクロを書き起こすときは視認性も低くなることでしょう。しかし、先のマイナスを使えば「[0-9]」と簡単に記述できるため、手間もかからず視認性も向上します。
また、この応用として、二桁の数字のみマッチ対象にする場合は「[0-9][0-9]」と並べて記述してください。三桁なら「[0-9][0-9][0-9]」、四桁なら「[0-9][0-9][0-9][0-9]」となります。
蛇足ですが、Perlなど比較的新しいプログラミング言語では、数字を意味するメタ文字「\d」が使えるため、四桁の数字も「\d{4}」と記述可能です。たとえば電話番号のように規則性に沿って番号桁数が異なる場合は「\d{2,4}-\d{2,4}-\d{4}」と、市外局番は二桁から四桁、次の局番も二桁から四桁、最後の番号は四桁と記述できるため、より簡略的にできるのは大きなメリットでしょう。
正規表現
検索:[0-9]
Target
0
1
2
10
Search Result
0
1
2
10
マイナスの活用方法として、半角英大文字なら「[A-Z]」、半角英小文字なら「[a-z]」と、直感的に記述できますが、日本語の場合は少々面倒になります。それが漢字なのか、片仮名なのか、平仮名なのかによって範囲指定を細かく調整しなければなりません。たとえばすべての片仮名であれば「[ァ-ヶ]」と、平仮名であれば「[ぁ-ん]」となります。
一見すると違和感を覚えますが、これはJIS X 0208:1983で定義された順番であり、一般的な正規表現では、文字コードをベースにバイト単位で検索を行なうため、このような順番になるのです(図1)。
正規表現
検索:[ァ-ヶ]
Search Result
すべての片仮名
正規表現
検索:[ぁ-ん]
Search Result
すべての平仮名
図1 XP標準ツールである文字コード表を使うと、平仮名は「ぁ」から始まり「ん」で終了。片仮名は「ァ」から始まり「ヶ」で終わっているのが確認できます |
一方、漢字の場合はより煩雑になります。先のJIS X 0208:1983であれば、「亜」から「黑」までを範囲とする「[亜-黑]」か、全角スペースや平仮名など多くの全角文字をマッチ対象となる「[ -黑]」を使えば済むのですが、Windows Vistaでは、より新しいJIS漢字規格であるJIS X 0213:2004が使用できるため、前述した文字列では「?」や「?」がマッチ対象に含まれません。
シフトJISではなくUTF-8形式のテキストファイルに対して、全角文字列を検索対象とするには、「[ -黑]」ではなく「[ -?]」をお使いください(図2)。ただし、このUTF-8形式用範囲は、文字コード表を元に各文字範囲を調べたので、うまくマッチしない可能性もあります。あらかじめご了承ください。
また、今回はWindows OS上の秀丸を前提にしていますが、ユニコードをベースとしているOS環境およびテキストエディタの場合も、後者をお使いください。
正規表現
検索:[ -黑]Search Result
すべての全角文字(JIS X 0208:1993)
正規表現
検索:[ -?]Search Result
すべての全角文字(JIS X 0213:2004)
図2 Vistaの文字コード表では、JIS X 0213:2004による拡張が行なわれ、文字コードが異なっています |
最後にこれらの応用編を紹介しましょう。一般的に「縦組み」と呼ばれる文書が上から下へ流れる組版の場合、「、。」が使われますが、文書が左から右(もしくはその逆)に流れる「横組み」では、「,.」が使われることもあります。基本的には統一されていれば問題ない、というのが現状ですが、どちらが良いかは棚に上げておき、ここでは文書中の句読点を変換してみましょう。
日本語では多くの場合、句読点を全角文字列の後につけるため、先の全角文字をマッチする正規表現が役立ちます。全角文字列を表わす「[ -黑]」を「\f」で囲み、その後に句点もしくは読点をつけてください。置換文字列として「\1」の後に変換する句読点を用いることで、文書内の句読点が一気に変換されます。繰り返しになりますが、UTF-8形式などのテキストファイルに対して行なう場合は、「\f[ -?]\f、」としてください。
正規表現
検索:\f[ -黑]\f、
置換:\1,
検索:\f[ -黑]\f。
置換:\1.
以上で「-」に関する説明を終えますが、このほかにもキャレット内で使用できるメタ文字として、「()(パーレーン)」や「|(パイプ)」があります。これらの使用方法は次回以降でご紹介しましょう。
阿久津良和(Cactus)