「ひまわり」正規表現検索のコツ†
小木曽 ogiso@ogiso.net
「ひまわり」で正規表現を使った検索をするときのコツです。
「ひまわり」の通常(本文)検索で使える正規表現†
「ひまわり」で通常(本文)検索(インデックスを利用した検索)で使える正規表現は次のようになっています。
- 検索文字列(キー)に使える正規表現
- 通常の文字と列挙型の文字クラス。([国國] [らりるれろ]など)*1
- 前文脈・後文脈で使える正規表現
- javaの正規表現ならすべて利用可能。
(範囲指定型の文字クラス[ら-ろ] や 文字クラスの否定[^国國][^ら-ろ]ももちろん可)
参考URL: http://docs.oracle.com/javase/jp/6/api/java/util/regex/Pattern.html
キーに使える正規表現に制限があるのは、検索を速くするためのインデックスをプログラムが利用するためです。インデックスを利用するためにキーには確定した文字を指定する必要があります。
キー・前文脈・後文脈の三つの部分に分かれているので、それぞれに検索のための文字列をうまく割り振ることでさまざまな検索目的に対応します。
正規表現をフルに使って検索するには
モードを切り替えて「本文(grep)」で検索すればほとんどの正規表現が使えます。
(ただし、検索対象のデータによっては用意されていないかも。設定ファイルを自分で書き換えれば利用できます。)
この場合、インデックスを使用しないので、検索速度は遅くなります。
正規表現による字種指定
文字種を指定するには大きく分けて二通りの方法があります。
- 文字クラスによる字種指定
[ぁ-ん] | ひらがな |
[ァ-ヴ] | カタカナ |
[一-龠]*2 | 漢字(JIS X0208内) |
[0-9] | 半角数字 |
[A-Za-z] | 半角アルファベット |
- Unicodeプロパティ、Unicodeブロックによる字種指定
- 前後文脈ではUnicodeプロパティ、Unicodeブロックを使った文字指定ができます*3。
- Unicodeプロパティを使うと文字クラスよりはっきりと文字種が指定できます。
\p{InCJKUnifiedIdeographs} | 漢字(CJK統合漢字) |
\p{InHiragana} | ひらがな |
\p{InKatakana} | カタカナ |
\p{N} | 数字 |
\p{P} | 句読点 |
\p{S} | 記号 |
テクニック†
調べたい語に対応する正規表現を思いついても、それをそのままキーに入れて検索することができない場合があります(特にインデックスを利用した検索)。そんな場合には次のような工夫をして検索して下さい。
キーと前後文脈にうまく分けてやる†
- キーに入れられない正規表現を前後文脈に入れることでインデックスを利用した検索ができるようになる場合があります。
- 例:漢語サ変動詞を検索する場合
- キー“[一-龠][一-龠]する”で検索しても(インデックスを利用した検索では)正しくヒットしません。
- 前文脈“[一-龠][一-龠]”で終わる,キー“する”の二つに分ければ検索できます。
- キー・前文脈・後文脈の三つの部分にどのように割り振るかがポイントになります。
- 検索オプションの「前文脈を含む」「後文脈を含む」をうまく利用してください。
無理をしないで2回以上に分ける†
- 一度には検索できない場合でも2回以上に分ければ検索できることがあります。
- 検索結果を表計算ソフト(Excelなど)に貼り付けた下に、次々に新しい検索結果を貼り付けることで複数回分を一つのシートにまとめることができます。
9953