正規表現入門 (3)

前回までのあらすじ。EREに入門したはずなのに、Localeの隘路にはまりこんでいた。

今回のあらすじ。不正 (invalid) と未定義 (undefined) の隘路にはまりこむ。

正規表現クイズ!

  1. a{4,2}
  2. a{4}{2}
  3. ^$
  4. $^
  5. ^{0}$
  6. ${0}^

答えあわせタイム!

  1. a{m,n}はmがn以下でなければならないので不正
  2. 未定義(GNU実装ではa{8}と等価になる。エラーになる実装もある)
  3. 空文字列にマッチする
  4. 空文字列にマッチする
  5. 未定義(GNU実装では空文字列にマッチする。エラーになる実装もある)
  6. よく判らない(GNU実装では空文字列にマッチする。エラーになる実装もある)

よく判らないのはEREの文法がウンコだから。歴史があるンだろう。経緯があるンだろう。実装を拾いあつめ、最大公約数を求めたら、ウンコがあった。きっと、そういうことなんだろう。

One or more ERE_dupl_symbols appearing first in an ERE, or immediately following '|', '^', or '('

だいたい、^$に結合の優先順位が定められているのも良く判らない。^foo|bar$が、(^foo)|(bar$)であって^(foo|bar)$でないことを明確にしたいという思いがあるンだろう。思いなんて知ったことか。(PCREやECMAScriptがそうであるように)ゼロ幅表明として扱ったほうがスッキリする。

続くだろうか。