From: Kazuhiro Yoshida Date: 2003-03-30T19:43:20+09:00 Subject: [ruby-dev:19946] Re: [Oniguruma] Version 1.8.4 もりきゅうです。 Tanaka Akira wrote: > In article <200303281112.AA02726@moriq.moriq.com>, > > 要は [^\[\]=\s] と書いてもわかりにくい、と言いたいわけなんですが。 > > 同程度の読みやすさ、読みにくさだと感じるわけですね。 > では、完全に同じ読みやすさ、読みにくさだと感じますか? when /^--\[no-\]([^\[\]=\s]*)(.+)?/ when /^--\[no-\]([^][=\s]*)(.+)?/ 完全に同じだとは感じませんね。 上は、冗長な感じがするので読みにくい。 下は、[^] で切れているように見えるので読みにくい。 逆に読みやすさについて書いてみると 上は、前から文字をたどっていき、 \] では閉じない(ことを知っている)ので、 閉じる位置が \s の次の ] であることがわかる。 このように、文字の意味することが明確なので、明確でない下より読みやすい。 下は、前から文字をたどっていき、[^] では閉じない(ことを知っている)ので、 閉じる位置が \s の次の ] であることがわかる。 このように、簡潔な表現なので、簡潔でない上より読みやすい。 > 上記のように空白を入れる場合、[^][=\s] の中には空白を入れられる文字間 > が [(1)^(2)](3)[(4)=(5)\(6)s(7)] と 7箇所存在します。ということは空白 > を入れるか入れないかの全ての組合せは 2**7=128 種類あるわけですが、なぜ > そのなかで上記の 3種類だけを示したのでしょうか? > おそらく、上記以外の親和度を感じる人は少ないと予想されるからだと思うん > ですが、なぜそうなのでしょう? 文字クラスは [ で始まって ] で終わると、みなさんは知っていると思ったから。 そして、[ とのつながりが ^ は ] より弱いと、みなさんが感じると思ったから。 ほかの文字はその他大勢としてひとくくりにして見るだろうと、みなさんが(略) …ということのように思います。 > > この見た目の感じ方は経験によって異なると思います。 > > ほとんどの人は 128種類中のたった 3種類のどれかと感じ、3種類のどれかは > 経験によって異なるというわけですか? 少なくとも [^][=\s] という表現については、この 3種類の感じ方が大半を占めるだろうと思ったの です。 もちろん、ほかの感じ方を想像することはできますね。例えば ^] をひとつの 表現とする文化に浸っていた人は [ ^] =\s] こう感じるのでしょう。私は感じませんが。 …そうか。文字間の感じ方の距離(力? )を段階的に付けるなら、もっと多くの 組み合わせがありますね。 [ ^ ] = \s ] 1 2 3 3 0 4 とか。 > merd の horizontal layout の regexp 版ですね。 > http://merd.net/choices_syntax.html#horizontal_layout > > Ruby も空白の有無によって挙動が変わることが多々ありますし、別にいけな > いとは思いませんが。 ああ。確かに許されるのかもしれません。 > > 何も考えなくて一番楽なのは > > \を伴わない英数字 はメタ文字ではない > > \を伴う記号 はメタ文字ではない > > の規則を厳格に適用することですかね。 > > この規則は昔から完全に適用されていると思いますが、どこか抜けがあります > か? 文字クラスの中で使う [ ] - が例外だと考えました。 厳格に適用すれば when /^--\[no-\]([^\[\]=\s]*)(.+)?/ は許され when /^--\[no-\]([^][=\s]*)(.+)?/ は許されない…。あ、そうか。私は上記の規則から \を伴う英数字 はメタ文字である \を伴わない記号 はメタ文字である も成り立つものだと考えてしまいました。 対偶と逆の違いにはまったのか…。 逆は必ずしも真ならず。 > > 結局今のがバランスが取れてるのかも。 > > えぇと、「今」というのはいつを指してますか? 1.6.8 とか 1.8.0 とか。この議論以前の時点という感じです。 正確な表現でなくて、すみません。 ---- YOSHIDA Kazuhiro moriq@moriq.com http://www.moriq.com/