• ベストアンサー

|。ってなんですか? 正規表現

正規表現の学習中です。読んでいる本の中に次の式がありました。  (?<=^|。)[^。]+。 日本語の文章の中から一文を抽出するための正規表現です。  。以外の文字がダーッと連なった後に。が来る文字列 とのことです。  [^。]は。以外の文字  +はそれが1個以上ある ですから  [^。]+ は  。以外の文字が1個以上ある という意味です。 その後に。が付きますから、  [^。]+。 だけで  。以外の文字がダーッと連なった後に。が来る文字列 ということになります。 では  (?<=^|。) の意味は何でしょう。  (?<=なんたら) は後方参照を意味しますから、 ^|。 のすぐ後に [^。]+ が続くと言いたいのでしょうか。 だとすると  ^|。 が問題です。  ^もしくは。 という意味なら、^は正規表現で記号として使われている文字ですから、  \^|。 と表現されそうなものです。 それに、。は文末でしか利用されない文字ですから、これに注目して検索を行うというのは理解できますが、^は日本語でなんら特徴を持つ文字ではありません。  ^もしくは。 という理解は間違いでしょう。 それでは^を記号として考えるとして、その前後を[]で囲んでいないから、この^は文字列の先頭を表すのでしょうか。そうすると件の正規表現は  先頭の|。のすぐ後から。以外の文字が連なった後に。が来る文字列 という意味になります。日本語の一文を抽出する正規表現という解説にかなり近づいてはいます。 しかし  |。 とは一体何? |はorを意味する記号ですが、  何とか or 。 という意味でしょうか。 でも「何とか」は「何とか」なりに何か文字表現がなされていても良さそうですし、それに  先頭の「何とか」または。のすぐ後から・・・ という解釈は意味不明。  |。 はどのように解釈すべきなのでしょうか。 お手数をお掛けします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

未検証だけど, ^ 先頭(には直前の文がなく句点がない) | または 。抽出しようとしている文の直前の文の句点 じゃないの? #^\|。じゃないから…

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

(?<=) は後方参照 (back reference) ではなく、戻り読み (look-behind)です。 解釈としては #1 の方の推測の通りで、先頭か、。の直後からの 。以外の文字列で 。が登場するまで。 ということになります。 戻り読みの部分が、^ (先頭) か 。 の選択 (alternative) になっているわけです。これにより、「一文」をきちんと頭から尻尾までマッチさせる ようになります。

makoji
質問者

お礼

なるほど、私が読んだ本には^といったら  ^東京 のように、何らかの文字をともなう利用法しか書いていませんでしたが、単独で用いて、  (直前に何もない)先頭 を意味する用途もあるわけですね。 とすると  ^|。 で、  (直前に何もない)先頭=段落の最初 または  。=前の文章の終わり を意味するわけですね。 件の正規表現と総合すると、  直前に何もない先頭か(前の文章の)。に続いて、。以外の文字が連なった後に。が付く文字列 となり、これはまさに日本語の一文ですね。 ありがとうございました。

関連するQ&A