授業資料/Himawariの正規表現

「ひまわり」正規表現検索のコツ

小木曽 ogiso@ogiso.net

「ひまわり」で正規表現を使った検索をするときのコツです。Ver.1.2用です。

「ひまわり」で使える正規表現

「ひまわり」で検索に使える正規表現は次のようになっています。

検索文字列(キー)に使える正規表現
通常の文字と列挙型の文字クラス。([国國] [らりるれろ]など)*1
前文脈・後文脈で使える正規表現
javaの正規表現ならすべて利用可能。
(範囲指定型の文字クラス[ら-ろ] や 文字クラスの否定[^国國][^ら-ろ]ももちろん可)
参考URL http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html

キーに使える正規表現に制限があるのは、検索を速くするためのインデックスをプログラムが利用するためです。インデックスを利用するためにキーには確定した文字を指定する必要があります。

キー・前文脈・後文脈の三つの部分に分かれているので、それぞれに検索のための文字列をうまく割り振ることでさまざまな検索目的に対応します。

テクニック

調べたい語に対応する正規表現を思いついても、それをそのままキーに入れて検索することができない場合があります。そんな場合には次のような工夫をして検索して下さい。

キーと前後文脈にうまく分けてやる

キーに入れられない正規表現を前後文脈に入れることで検索できるようになる場合があります。

  • 例:漢語サ変動詞を検索する場合
    • キー“[一-龠][一-龠]する”で検索しても正しくヒットしません。
    • 前文脈“[一-龠][一-龠]”で終わる,キー“する”の二つに分ければ検索できます。

キー・前文脈・後文脈の三つの部分にどのように割り振るかがポイントになります。

無理をしないで2回以上に分ける

一度には検索できない場合でも2回以上に分ければ検索できることがあります。

検索結果を表計算ソフト(Excelなど)に貼り付けた下に、次々に新しい検索結果を貼り付けることで複数回分を一つのシートにまとめることができます。

  • 例:「みたいだ」「みたようだ」 を検索する
    • キー“みた(い|よう)[だなに]”で検索しても正しくヒットしません。(「(|)」は使えません)
    • “みたい[だなに]”“みたよう[だなに]”の2回に分ければ検索できます。
  • 例:「其を」「其れを」「それを」を検索する
    • キー“(其れ?|それ)を”で検索しても正しくヒットしません。(「(|)」「?」は使えません)
    • “其を”“[其そ]れを”の2回に分けて検索して下さい。

力業

  • 例:カタカナ語を検索する
    • キー“[ァ-ヴ]+”で検索しても正しくヒットしません。(文字クラスの範囲指定は使えません)
    • 文字クラスの中身をすべて列挙する形にすれば検索可能です。ただし大変時間がかかります(パソコンによってはメモリ不足になる場合があります)
      キー:“[ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴ・ー]”
      前文脈:“[ァ-ヴ]”で終わらない (二文字以上のカタカナ語なら、後文脈:“[ァ-ヴ]”で始まる)
  • 例:アルファベット表記の語を検索する
    • キー“[a-zA-Z]+”で検索しても正しくヒットしません。(文字クラスの範囲指定は使えません)
    • キー:“[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]”
      前文脈:“[a-zA-Z]”で終わらない (二文字以上のアルファベット表記の語なら、後文脈:“[a-zA-Z]”で始まる)

前後文脈での字種指定

文字種を指定するには大きく分けて二通りの方法があります。

  1. 文字クラスによる字種指定
    [ぁ-ん]ひらがな
    [ァ-ヴ]カタカナ
    [一-龠]*2漢字(JIS X0208内)
    [0-9]半角数字
    [A-Za-z]半角アルファベット
  2. Unicodeプロパティ、Unicodeブロックによる字種指定
  • 前後文脈ではUnicodeプロパティ、Unicodeブロックを使った文字指定ができます*3
  • Unicodeブロックを使うと文字クラスよりはっきりと文字種が指定できます。
    \p{InCJKUnifiedIdeographs}漢字(CJK統合漢字)
    \p{InHiragana}ひらがな
    \p{InKatakana}カタカナ
    \p{N}数字
    \p{P}句読点
    \p{S}記号

1002


*1 文字クラス内の「-」はリテラル=文字通り解釈される。したがって[ら-ろ]は“ら”または“-”または“ろ”。
*2 Unicodeの範囲で指定するので[亜-熙]ではありません。
*3 Unicodeスクリプトは使えません

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS