複数の対象にマッチさせる[](ブラケット)

前々回の記事では、任意の1文字にマッチするメタ文字「.(ピリオド)」や、直前にある文字の1個以上の繰り返しにマッチする「+(プラス)」を用いましたが、より多くのメタ文字を組み合わせると、複雑な文字列にマッチングさせることが可能です。今回は不特定の文字にマッチするメタ文字を使ってみましょう。

さて、日本語が難しいと言われる所以のひとつに、漢字の使い方があります。たとえば「ありがたい」という言葉は、感謝を表わす場合や自分にとって好都合な状態を表わすだけでなく、実際にあり得ない場合を用いる場面にも使用するため、混合される方も少なくありません。たとえば、場所や地位の場合は「在る」、持ち物や限りがある場合は「有る」を用います。

この「在る」「有る」の両者を正規表現でマッチさせるには、「[](ブラケット)」を使用しましょう。ブラケットで囲まれた文字列の"いずれかのひとつ"を意味し、何文字あろうとマッチ対象として扱われる便利なメタ文字です。また、ブラケット内にもメタ文字を使用できるため、文字列の先頭を指すのであれば「^(キャレット)」、文末であれば「$(ドルマーク)」を追加してください。

「在る」「有る」の両者を対象にする場合は「[有在]」と書きますが、「有」は「~りがたい」や「~がたい」と送り仮名が変化する場面があります。加えて「ありがたい」の「がたい」も、漢字で表する場合もあるでしょう。そのため、先の送り仮名問題と「難い」をまとめて解決するには「[難りがた]」と漢字および送り仮名を、キャレットで囲むことで対処できます。

最後に「ありがたい」は同表記だけでなく、「ありがたかった」「ありがたき」「ありがたく」「ありがたければ」と変化する場合もあるでしょう。それらの文字列にマッチさせるには、直前にある文字に対して0個以上の繰り返しにマッチするメタ文字「*(アスタリスク、もしくはワイルドカード)」を使用しましょう。同メタ文字と前述の正規表現を組み合わせることで、「~た」「~難」までがマッチ対象となります。残りの部分は、前々回の記事で用いたタグ付き正規表現を用いれば、「~かった」など異なる表記にも使用できます。

正規表現

検索:[有在][難りがた]*
置換:ありがた\1

Before

有り難い
有難い
有りがたい
在りがたい

After

ありがたい
ありがたい
ありがたい
ありがたい

Before

有り難かった
有難くもないい
有りがたく存知ます
在りがたければ

After

ありがたかった
ありがたくもない
ありがたく存知ます
ありがたければ

便利なメタ文字「?」

先ほどは、直前にある文字に対して0個以上の繰り返しにマッチする「*(アスタリスク、もしくはワイルドカード)」を用いましたが、もうひとつのメタ文字として、「?(クエスチョンマーク)」を紹介しましょう。

直前にある文字に対して0~1回以上の繰り返しにマッチする「?」は、"その文字がある場合もない場合もマッチする"のが利点です。たとえば、ウェブサーバー用URLとしては「http」だけでなく、セキュアな「https」が用いられることがありますが、この両者を検索対象に加える場合は、「https?」と書くことで、末尾の「s」がある場合もない場合もマッチします。

下記サンプルでは、置換文字列として「☆\t\0」を使用しています。これはマッチしたURLのみ行頭に"「☆」+タブコード+検索文字列全体"という意味のため、「ftp」ではじまるURLは変化しません。大量のURLリストを整理するときなどにご使用ください。

正規表現

検索:https?
置換:☆\t\0

Before

http://www.mycom.co.jp/
https://www.mycom.co.jp/
ftp://www.mycom.co.jp/

After

☆   http://www.mycom.co.jp/
☆   https://www.mycom.co.jp/
ftp://www.mycom.co.jp/

阿久津良和(Cactus