In article <20030327085213Z.maki / rubycolor.org>, TAKAHASHI Masayoshi <maki / rubycolor.org> writes: > 個別の正規表現の読みやすさ・読みにくさについては > 場合や人によりけりという気がするので、まずは一般的な > ルールをいくつか挙げてみます。 > > 1) 複数の解釈がありそうに見えるものは読みにくい > 2) 特殊なルールが必要なものは読みにくい > 3) 字面がごちゃごちゃしているものは読みにくい > > /[a-g-z]/ という正規表現の「読みにくさ」は、1)に由来するように > 思います(2も含むかも)。「a-g」と「-」と「z」なのか、それとも > 「a」と「-」と「g-z」なのかが判別しにくいです。 それは納得できますね。 > 一方、/[a-z-]/ の「読みにくさ」は、1)の意味ではあまり問題なさ > そうですが、 なぜですか? ここで、なぜ、z から ] までとは解釈しないのでしょうか? /[a-z-]]/ ならどうでしょうか? なお、一応書いておくと、普通 z から ] と解釈するだろうという主張をして いるわけではありません。 > 2)に由来する問題を感じます。 > 「[]の先頭または末尾は『-』を許可する」というルールは、奇妙に > 見えるかもしれません。 それはあり得ます。 > ところで、「-」をエスケープするというルールは、3) の > 「読みにくさ」に引っかかるように思います。 そうかもしれません。 > これはRubyの > 変数のルール、先頭に「$」があると読みにくく感じられるので > 好まれないグローバル変数に使う、という方針に通じるものが > ありそうです。もちろんエスケープがないと冗長な解釈が生じそう > な場合はないと困りますが、ある程度わかりやすい特殊ルールの > 導入で解決できるのであれば、それはそれで構わないのではない > かと思います。 そういう立場はあるでしょうね。というか、そういうのが Ruby 的な立場なの かも知れません。 > というわけで、今回の読みにくさに関しては、2)と3)のバランスの > 問題になるんじゃないかと。 バランスをどこにとるかということですね。 > で、実際にruby-1.8.0で使われている正規表現について、 > いくつか比べてみたのですが……(そっか、田中さんが作業された > んですもんね。せっかくやってもらっているのに言い出すのが > 遅くて申し訳ない……)。 作業前に言うためにはまつもとさんが取り込むと発言するよりも更に前である 必要があったので、そうするのはほぼ不可能だったと思います。 > たとえば、 > > /\A[^-][^=]\Z/ と /\A[^\-][^=]\Z/ > /\A([-+]?\d+)/ と /\A([\-+]?\d+)/ > /[^a-zA-Z0-9._-]/ と /[^a-zA-Z0-9_\-.]/ > /(?:\A|[^\w-])chunked(?:[^\w-]|\z)/ > と > /(?:\A|[^\-\w])chunked(?:[^\-\w]|\z)/ > > では、読みやすさとしてはあまり変わらないように思います。 > あるいは、 /[^a-zA-Z0-9_\-.]/ よりも > /[^a-zA-Z0-9._-]/ の方が読みやすいかもしれない、とか。 ふむ。 > # あ、Windowsで見るとUNIXよりも「\」の見づらさが > # 増すような気がします。 REVERSE SOLIDUS よりも YEN SIGN のほうが「ごちゃごちゃしている」からで すか? > あと、[[] の方はどうなのかというと、これもやはり字面の問題 > でしょう。「[[」と「[」が重なることと、「[」は「]」と強く > 結びついているように見えることから、ちかちかして見えます。 個人的には点滅するようには見えませんが、かっこが対になるように見えると いうのはその通りでしょう。というか、そう見えなかったらフォントのデザイ ンが間違っているのではないかと思います。 > その点、[a-]の「-」は、両端に文字を欲する力がそれほど強く > ないように感じます。実際、[]の外の「-」は、エスケープされ > ないわけですし。 この「文字を欲する力」には興味が湧きます。冒頭の「z から ] まで」とい う話とも関係するわけですが、もう少し詳しく説明して頂けませんか。 また、^ が左右に文字を欲する力はどの程度だと思われますか? さらに、[^-] や [^-a] についてはどう思いますか? # できれば演算子順位構文解析の、点がついた <, =, > との関連も尋ねてみ # たい所ですが... あと、 [-abc] [^-] [abcd-f-hijk] [abc-] [^-abc] というので読みやすさに順序をつけるとしたらどういう順序にしますか? -- [田中 哲][たなか あきら][Tanaka Akira]