視覚障害者のための
正規表現入門8



【最後に】
最初の節「正規表現って?」で書いた、小説の章タイトルにマッチさせる正規表現

^\s+[0-9]+章 .+$

に戻って、その意味をみておきましょう。
先頭に行頭指定のハットをつけ、末尾に行末指定のドルマークをつけています。こうすることで、正規表現を行全体にマッチさせるようにしています。文章中に、たとえば、「1章 XXXXXに書いた云々」というような文が混ざっている可能性を考慮し、そうしたところへのマッチングを排除する意図です。
ハットマークのあとに続く「エンマーク、半角小文字s、半角プラス」の部分は、行頭に空白文字がひとつは存在しなければならないことを意味します。空白文字とは、タブ文字や半角空白です。存在しない場合をも許容するなら、半角プラスを半角アスタリスクにします。
空白文字のあとに続く「左大括弧、全角0、ハイフン、全角9、右大括弧、半角プラス、章」という部分は、章番号のところですね。大括弧でくくり、文字リストを使っています。半角プラスで1回以上の繰り返しとしているのは、10章とか21章とかにもマッチさせたいからです。
そして直後に全角空白があって、何らかの文字がひとつ以上存在するというのが、「全角空白、ピリオド、半角プラス」の部分です。ピリオドは任意の1文字を意味します。
どうでしょう。
おわかりいただけましたか?

上述の正規表現は、章タイトルの形式が少し変わると、マッチしなくなります。
たとえば、

第1章 エルサレムの門
第2章 甦るダビデ
第3章 荒野へ
第4章 死海のほとり

という形だと、「第」が存在するためにマッチしません。
第が存在するどうかわからないけれど、存在する場合にもマッチさせたいなら、どう改変すればいいか。もう、おわかりですね。
正規表現、

^\s+第*[0-9]+章 .+$

とすればいいわけです。半角アスタリスクは直前の正規表現の0回以上の繰り返しですから、第はあってもなくてもマッチします。
ただ、この表現は、

第第第1章 エルサレムの門

という、誤植のような部分にもマッチします。第は存在しないか、存在するなら1個だけという点を確実にしたいなら、正規表現は、

^\s+第?[0-9]+章 .+$

となります。半角疑問符は0個か1個でしたね。ただ、半角疑問符をサポートしない処理系もあるので、アスタリスクを使っておくのが無難かもしれません。

上述の正規表現は、章番号には全角数字が使われているものと決めつけています。より広く半角数字にもマッチさせたい場合は?
さらに、「序章」や「終章」といったタイトルにもマッチさせたい場合は?
いろいろ表現方法はあるでしょうが、正規表現を、

^\s+第?[\d0-9序終]+章 .+$

とすればいいでしょう。大括弧でくくった文字リストに半角数字を意味する\dと、「序」と「終」という文字を加えています。
さらに、何章という表記だけで、「エルサレムの門」とか「甦るダビデ」などの、タイトル文字列がない章見出しにもマッチさせたいなら、どうすればいいでしょう。

^\s+第?[\d0-9序終]+章( .+)*$

簡単ですね。
タイトルの部分を丸括弧で包み、0回以上の繰り返しを意味する半角アスタリスクをつければいいだけです。


この節では、解説の最後として、正規表現の実際の組み立て方を見てきました。
上述のように、最初は簡単なものから、少しずつ複雑にしていけばいいと思います。
ただ、ここで注意が必要です。
どんなに慣れても、思いがけないマッチングは発生します。処理系によって微妙にあつかいが異なる場合もあります。
「置換」などで正規表現を使う場合、その正規表現が意図したとおりのマッチングを生むかを充分に確かめてから、「置換」を実行する必要があるでしょう。


前の項目へ
正規表現入門の目次ページ
文字主体トップページ







Copyright(C) 2003 Kazuhiro Kito All rights reserved